从使用个人用户帐户的 ASP.NET 5 Web 应用程序模板开始,我成功地使用 Microsoft 帐户进行外部身份验证。当用户单击“登录”时,他们将被重定向到ExternalLogin
in AccountController
像这样
<form asp-controller="Account" asp-action="ExternalLogin" method="post" asp-route-returnurl="@ViewData["ReturnUrl"]" class="nav navbar-right">
<button type="submit" class="btn btn-null nav navbar-nav navbar-right" name="provider" value="Microsoft" title="Log in"><span class="fa fa-sign-in"/> Log In</button>
</form>
这让他们使用他们的 Microsoft 帐户登录,一切似乎都运行良好。但是我如何拦截访问特权操作的直接尝试[Authorize]
以便用户被重定向到ExternalLogin
?可以设置默认操作吗Startup.cs
?
EDIT 1尝试遵循我创建的@Yves 的建议CustomAutorizationFilter
在过滤器文件夹中。它不检查任何条件
public class CustomAutorizationFilter : IAuthorizationFilter
{
public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
//if (...) // Check you conditions here
//{
context.Result = new RedirectToActionResult("ExternalLogin", "Account", null);
//}
}
}
并已编辑ConfigureServices
如下
services.AddMvc(config =>
{
config.Filters.Add(typeof(Filters.CustomAutorizationFilter));
});
当我在本地运行该应用程序时,它不再转到主页。它返回一个空白http://localhost:52711/Account/ExternalLogin
显然有很多我不明白的地方。
Edit 2:这是签名ExternalLogin
// POST: /Account/ExternalLogin
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
就是这样ExternalLogin
在 ASP.Net 5 Web 应用程序模板中开箱即用。