私は このチュートリアル をフォローして、外部認証を使用した単純なMVC5アプリを作成します。正常に動作していますが、authentication mode="None"
をauthentication mode="Forms"
に変更すると動作を停止します。
私はnullになっています:
await HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync()
リダイレクト時にFormsAuthenticationを抑制するための何かについてたくさん読んでいます。それが正しいパスかどうかはわかりませんが、これをインストールしようとしました nuget packet そして問題はまだあります。
では、認証モードを変更するたびにnullが発生するのはなぜですか?
ChallengeResult
クラスにResponse.SuppressFormsAuthenticationRedirect = true
を追加することで、これを機能させることができました(OWINおよびFormsAuthentication)。
チュートリアルに従っている場合、コードは次のとおりです。
public class ChallengeResult : HttpUnauthorizedResult
{
public ChallengeResult(string provider, string redirectUri)
: this(provider, redirectUri, null)
{
}
public ChallengeResult(string provider, string redirectUri, string userId)
{
LoginProvider = provider;
RedirectUri = redirectUri;
UserId = userId;
}
public string LoginProvider { get; set; }
public string RedirectUri { get; set; }
public string UserId { get; set; }
public override void ExecuteResult(ControllerContext context)
{
// this line did the trick
context.RequestContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
}
}
通常、ユーザーがまったく認証されていない場合、またはカスタム認証コードを開発する場合は、authentication mode="None"
を設定します。 MVC 5は、認証にASP.NETIdentityを使用するように更新されました。
ASP.NET Identityは、ユーザーのIDが一連のクレームとして表されるクレームベースの認証をサポートします。ここで、authentication mode="Forms"
を設定します。ASP.NET Forms Authentication
はクレームをサポートしていないため、クレームは機能しません。これが、null値を取得する理由です。