個々のユーザーアカウントを使用するASP.NET 5 Webアプリケーションテンプレートから、Microsoftアカウントで動作する外部認証を取得できました。ユーザーがログインをクリックすると、彼らは彼らがthierのMicrosoftアカウントを使用してログインし、すべてがうまく動作するようです取得します。このリダイレクトコントローラへのリダイレクトアクション
<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>
ようAccountController
にExternalLogin
にリダイレクトされます。しかし、ユーザがExternalLogin
にリダイレクトされるように、特権的なアクション[Authorize]
への直接アクセスを傍受するにはどうすればよいですか? 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);
//}
}
}
をチェックしませんし、私はローカルでアプリケーションを実行すると、それはもはやホーム・ページに行く
services.AddMvc(config =>
{
config.Filters.Add(typeof(Filters.CustomAutorizationFilter));
});
以下のようConfigureServices
を編集していません。それは空白を返しますhttp://localhost:52711/Account/ExternalLogin
明らかに私は分かりません。
編集2:ここではこれがExternalLogin
はASP.Net 5 Webアプリケーションテンプレートに箱から出てくる方法ですExternalLogin
// POST: /Account/ExternalLogin
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public IActionResult ExternalLogin(string provider, string returnUrl = null)
の署名があります。
編集後にリダイレクトループが発生することがあります。あなたの 'ExternalLogin'コントローラに' AllowAnonymousAttribute'を追加してみてください。その属性が 'IAuthorizationFilter'をバイパスしたと誤解されていなければ。デバッグして何が起きているのかを確認することができます。私はpcのATMではないです。だから私はそれを確認することはできません。 – Yves
私の質問に「ExternalLogin」の署名を追加しました。 – Vague
@Yvesはリダイレクトループについて正しいです。 'ExternalLogin' – Vague