canot因无效范围错误而调用userinfo

时间:2016-05-23 16:47:39

标签: asp.net oauth asp.net-identity-2 identityserver3

我正在设置身份server3,其中包含存储在ef 6中的Microsoft身份 我可以在/ token端点“登录”,但是当我尝试访问/ userinfo时,我收到了一个范围错误。 当我尝试将范围添加到我的/令牌登录时,它们不起作用。 试图编辑客户端以添加范围并仍然卡住。 客户端是资源所有者流。 只需要获取userinfo,这样我就可以获得用户的名称和角色。

1)访问用户信息端点需要什么范围?我的所有尝试都没有达到足够的范围。 2)我编辑了sql数据库和代码,以允许我的客户端有更多的范围,但它似乎不起作用。如何调试?

我也使用存储在sql和id服务器ef中的asp.net身份来存储令牌,客户端,范围和秘密,我正在努力,但我不确定它是对的。表已创建,但我没有看到令牌表事件中的任何行,但我发出了令牌。我现在有两个数据库:一个带有令牌/客户端/范围内容,另一个带有aspnet用户和角色。 我需要制作这个数据库吗?

看起来我的问题的一部分是使用身份服务器示例来使用实体框架来存储客户端,范围和相关数据。 看起来范围和/或范围声明和/或客户端列表中缺少某些项目,因此当我尝试使用范围参数登录时,如果在范围表中找不到该行,则会被拒绝。 致力于如何解决这个问题,我希望能让它发挥作用......

范围是否需要范围索赔?我需要看看能不能找到相关信息。

3 个答案:

答案 0 :(得分:0)

它的' openid'范围如文档所述。 https://identityserver.github.io/Documentation/docsv2/endpoints/userinfo.html

答案 1 :(得分:0)

如果有疑问,我只需从Github下载当前源代码并应用断点,而不是使用Nuget包。

离开记忆(所以这可能不完全准确)。

我相信UserInfoEndpoint会调用UserService.GetProfileDataAsync。 UserInfoEndpoint正在接受范围,但GetProfileDataAsync仅接受声明为" RequestedClaimTypes"。因此介于两者之间的范围将是将范围发送到端点并获取属于范围内的所有声明类型的列表。

这里要记住的最重要的事情是,传递给UserInfoEndpoint的范围必须是标识范围。端点不会返回属于资源范围的声明。

所以只是快速简化......

  1. 服务器接收发送到UserInfoEndpoint的范围
  2. 收到的范围中,仅查看身份范围
  3. 查找分配给标识范围的声明类型
  4. 将声明类型列表传递给GetProfileDataAsync为" context.RequestedClaimTypes"。
  5. 此时,您的自定义逻辑将确定RequestedClaimTypes如何转换为IssuedClaims。
  6. 我的猜测是你将资源范围传递给UserInfoEndpoint。

答案 2 :(得分:0)

最终解决了我的问题: 我在我的sql数据库中需要更多的范围,使用实体框架的v3的id服务器示例没有一些与身份服务器样本期望的相同的范围项,这使得登录令牌调用失败并且范围无效。 我编辑了范围和客户端的c#代码以获取我需要的内容并删除并重新创建sql表然后它开始工作。 我还添加了一个新的范围和范围声明,以添加我们的应用程序所需的非标准声明。

我确实附加了源代码,让我调试真正有用,因为我可以遵循逻辑并查看它不起作用的地方。这是一个巨大的帮助。 稍后我会看到我可以向源发布样本丢失的内容,这是真正的问题。 如果我们有一些关于如何使标准userinfo / profile声明工作的指南也可能是好的。我得到了它,但这也是一些源调试,看看id服务器如何调用商店获取信息,以便我可以理解如何点击并将数据传递给调用者。

底线是样本在至少一个地方有不同的范围和声明集,这是关键问题。

其余的是学习如何使用范围和范围声明添加到用户信息端点以满足应用程序需求。