加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 对LOCAL AUTHORITY声明和外部提供商声明的混淆

发布时间:2020-12-16 07:41:34 所属栏目:asp.Net 来源:网络整理
导读:我正在创建一个简单的WebApi,允许用户与Facebook连接.当我从facebook获取accessToken时,我正在调用RegisterExternal来创建Asp.Net Identity记录并存储来自令牌的声明.这些声明还包括我稍后查询facebook图表所需的访问令牌.到目前为止,一切似乎都很好. 我遇到
我正在创建一个简单的WebApi,允许用户与Facebook连接.当我从facebook获取accessToken时,我正在调用RegisterExternal来创建Asp.Net Identity记录并存储来自令牌的声明.这些声明还包括我稍后查询facebook图表所需的访问令牌.到目前为止,一切似乎都很好.

我遇到的问题是阅读索赔.我可以看到他们在我的数据库中我只是想弄清楚如何查询这些数据.我试过了

var claimsIdentity = User.Identity as ClaimsIdentity;

但这让我有2个索赔
a)“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”
b)角色

这两个都是发行人LOCAL AUTHORITY(说实话,我不确定它们何时被创建,因为我没有明确添加这些).因此,我认为他们要么将我对数据库的索赔再次保存在错误类型的发行人身上,要么是混乱

await userManager.AddClaimAsync(user.Id,new Claim("urn:facebook:access_token",accessTokenClaim.Value,ClaimValueTypes.String,"LOCAL AUTHORITY"));

或者我访问索赔的代码不正确.

任何人都可以对此有所了解吗?

解决方法

在向您的身份添加声明时:

// Get the claims identity
    ClaimsIdentity claimsIdentity =
        await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);

    if (claimsIdentity != null)
    {
        // Retrieve the existing claims
        var currentClaims = await UserManager.GetClaimsAsync(user.Id);

        // Get the list of access token related claims from the identity
        var tokenClaims = claimsIdentity.Claims
            .Where(c => c.Type.StartsWith("urn:tokens:"));

        // Save the access token related claims
        foreach (var tokenClaim in tokenClaims)
        {
            if (!currentClaims.Contains(tokenClaim))
            {
                await UserManager.AddClaimAsync(user.Id,tokenClaim);
            }
        }
    }

要将这些声明持久保存到数据库,您必须为用户调用SignIn:

// Sign in and redirect the user
    await SignInAsync(user,isPersistent: false);

要稍后检索声明,您只需使用:

var claimsIdentity = HttpContext.User.Identity as ClaimsIdentity;
if (claimsIdentity != null)
   var claims = claimsIdentity.Claims;

此代码由本文的片段组成:http://www.jerriepelser.com/blog/get-the-twitter-profile-image-using-the-asp-net-identity

如果你想看一个完整的例子,我建议你仔细阅读.我自己使用了本文中的代码,它在我的项目中对Twitter和Facebook外部声明都很有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读