私はASP.NET WEB APIを使用してREST APIを実装しています。2.I get/app/Account/ExternalLoginのメソッドを持つデフォルトのAccountController実装があります。User.Identity.IsAuthenticatedは常にfalseを返します
[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
[Route("ExternalLogin", Name = "ExternalLogin")]
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)
{
if (error != null)
{
return Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error));
}
if (!User.Identity.IsAuthenticated)
{
return new ChallengeResult(provider, this);
}
ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
if (externalLogin == null)
{
return InternalServerError();
}
if (externalLogin.LoginProvider != provider)
{
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
return new ChallengeResult(provider, this);
}
ApplicationUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider,
externalLogin.ProviderKey));
bool hasRegistered = user != null;
if (hasRegistered)
{
Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
OAuthDefaults.AuthenticationType);
ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
CookieAuthenticationDefaults.AuthenticationType);
AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName);
Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);
}
else
{
IEnumerable<Claim> claims = externalLogin.GetClaims();
ClaimsIdentity identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
Authentication.SignIn(identity);
}
return Ok();
}
私はインターネットを見てきましたが、この状況に該当するものは見つかりませんでした。
私が使用してURL
https_://_www.dummydomain.com:?43363/API /アカウント/ ExternalLoginプロバイダ=グーグル& response_type =トークン&のclient_id =自己& REDIRECT_URI = HTTPS%3A%2F %2Fwww.dummydomain.com%の3A43363%2F &状態= jI4zGXuaVvHI8qf9E0Nww3qBwke0YsYwD9AORwKBj3o1
すべての外部サービス(グーグル/ FB)がcorrecltyに動作します。私はAspNet.ExternalCookieが設定されている参照が、私が許可されていないことだし、AppController
でRequest
財産の
{
email:null,
hasRegistred: true,
loginProvaider: null
}
アップデート1
Properties
辞書はMS_UserPrincipal
が含まれていない取得戻ってリダイレクトします。
添付のスクリーンショットを参照してください。 Properties keys
Request.Properties["MS_HttpContext"]
を返す:(スクリーンショットを参照) MS_HttpContextobject
これは私のためには機能しません。 MS_UserPrincipalが見逃されているようです。スクリーンショットhttps://www.screencast.com/t/FpMDjU1Oをご覧ください。 –