我使用Thinktecture Identity Server V3进行身份验证,并且在从HttpContext.Current.User获取信息时遇到问题。
我使用API来处理调用,但是当我调用HttpContext.Current.User时,ID不能仅由Identity Server设置的声明使用。
当我通过signalR拨打电话时,集线器HttpContext.Current.User为空,我无法获取用户ID,甚至无法查看cliams。
我目前正在使用挂钩到AspNetIdentity并覆盖PostAuthenticateLocalAsync并尝试将用户管理器用于CreateIdentityAsync的自定义用户服务,但这会失败。
有没有办法在登录时填充默认声明并检索信号器连接和Web API调用的详细信息?
由于
答案 0 :(得分:0)
你最终解决了这个问题吗?
我对Thinktecture Identity Server来说还是一个新手,但是我会对此采取措施。
Scope上有一个选项IncludeAllClaimsForUser,默认情况下设置为false。根据我正在阅读的内容,此选项将在调用GetProfileAsync()端点时删除过滤器。
以下是我发现此信息的链接:
http://identityserver.github.io/Documentation/docs/configuration/scopesAndClaims.html
https://github.com/IdentityServer/IdentityServer3/issues/621
答案 1 :(得分:0)
在我有时间搞清楚之前,我不得不停车。
我确实在填充声明的范围上使用了IncludeAllClaimsForUser属性。我遇到的问题是User.Identity.GetUserId()总是返回null,因为现在它已在声明" sub"中设置。
这不是一个大问题,但是当我在signalR连接上通过持有者令牌时,Current.User始终为空,我甚至无法读取" sub"权利要求。
就像没有在信号R连接上验证不记名令牌,所以我无法获得用户的详细信息。
感谢您的帮助,非常感谢。