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个索赔 这两个都是发行人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外部声明都很有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – Html.BeginForm使用FormMethod.GET丢失rout
- asp.net – 如何使用命令行msbuild部署VS2012网站项目,而无
- 在ASP.NET中使用Visual Studio发布功能有什么好处?
- 单元测试 – 如何对Asp.net核心WebAPI(net452)项目进行单元
- asp.net-mvc-2 – Asp.net MVC标签
- asp.net-mvc-3 – 同一页面中的两个ValidationSummary
- 在asp.net中是否有验证电子邮件地址的功能?
- 如何配置IIS 7以使用子目录作为默认文档?
- asp.net-mvc – 在视图中显示包含MVC中继承的模型
- 在ASP.NET MVC 5中向Windows角色添加自定义角色
推荐文章
站长推荐
- asp.net-mvc – 记录死亡的所有黄色屏幕,即使它是
- 从ASP.NET Core连接到SQL Server的最佳实践?
- asp.net – MVC 5 Web API与Facebook访问令牌到R
- asp.net-mvc-3 – ASP.Net MVC 3,Ninject和Quart
- 如何自定义Asp.net Identity 2用户名已经采取验证
- asp.net – 我可以在MasterPage中使用UpdatePane
- 在asp.net core中使用托管服务实现后台任务
- ASP.NET Core 3.1 WebApi+JWT+Swagger+EntityFra
- asp.net-mvc – 为什么编码逗号URL?
- asp.net-mvc – 在实体框架中使用存储过程
热点阅读