OWIN - 在后续请求中访问外部声明

OWIN - Access External Claims in subsequent requests

我有一个 ASP.Net 应用程序,它通过第三方提供商使用 OWIN 和外部登录,特别是 google。

在身份验证期间,此代码用于从 OwinContext 中提取 ClaimsIdentity

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();

其中 AuthenticationManager 是

    private IAuthenticationManager AuthenticationManager
    {
        get
        {
            return HttpContext.GetOwinContext().Authentication;
        }
    }

但是,在后续请求(即成功登录后重定向到主页)中,GetExternalLoginInfoAsync() returns 为空。我想要做的是从我的身份验证请求中访问有关外部提供商 returns 的用户帐户信息(即个人资料图片)。我如何从 MVC 控制器或 Web API 控制器访问这些声明?

我拥有的几乎所有代码都是 Visual Studio 样板代码,因此我不会在此处包含它,但如果需要任何特定内容,我可以添加一些。

感谢您提供的任何帮助。

我试图使用外部登录信息来提取图片和个人资料等数据url。这样做的正确方法是将来自外部来源的声明分配给本地身份,如下所示:

  public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User, string> manager, IAuthenticationManager authentication = null)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here

        if (authentication != null)
        {
            ExternalLoginInfo info = authentication.GetExternalLoginInfo();

            if (info != null)
                foreach (Claim claim in info.ExternalIdentity.Claims.Where(claim => !userIdentity.HasClaim(c => c.Type == claim.Type)))
                {
                    userIdentity.AddClaim(claim);
                    await manager.AddClaimAsync(userIdentity.GetUserId(), claim);
                }
        }

        return userIdentity;
    }