C# 用户信息终结点未找到openid作用域

C# 用户信息终结点未找到openid作用域,c#,identity,openid-connect,identityserver3,C#,Identity,Openid Connect,Identityserver3,我正在使用AuthorizationCode流将IdentityServer 3的实现配置为新客户端应用程序(Salesforce Communities)的身份提供者。在客户端到达userinfo端点之前,一切都按预期工作,此时会发生以下错误: ERROR IdentityServer3.Core.Validation.TokenValidator Checking for expected scope openid failed 及 这显然会让人相信客户机没有在授权请求中请求openid作

我正在使用AuthorizationCode流将IdentityServer 3的实现配置为新客户端应用程序(Salesforce Communities)的身份提供者。在客户端到达userinfo端点之前,一切都按预期工作,此时会发生以下错误:

ERROR IdentityServer3.Core.Validation.TokenValidator Checking for expected scope openid failed

这显然会让人相信客户机没有在授权请求中请求openid作用域,这在使用openid Connect时是必需的。但是,我可以确认客户端确实在授权请求中请求了openid的范围:

INFO  IdentityServer3.Core.Validation.AuthorizeRequestValidator Authorize request validation success
 {
  "ClientId": "{client_id}",
  "ClientName": "{client_name",
  "RedirectUri": "{redirect_uri}",
  "AllowedRedirectUris": [
    "{allowed_uri_which_matches_request}"
  ],
  "SubjectId": "{subject_id}",
  "ResponseType": "code",
  "ResponseMode": "query",
  "Flow": "AuthorizationCode",
  "RequestedScopes": "openid",
  "State": "{state_value}",
  "SessionId": "402a2356f0bd91a350dfd1f8779ea229",
  "Raw": {
    "response_type": "code",
    "client_id": "{client_id}",
    "redirect_uri": "{redirect_uri}",
    "scope": "openid",
    "state": "{state_value}"
  }
}
我还可以确认openid是我的客户机允许的范围,并且openid在ScopeStore中

此外,当我查看数据库中生成的令牌时,它们都正确地具有openid范围。userinfo端点中有一些东西导致检查失败

我对这个问题完全感到困惑,因为这个客户机的实现几乎完全是标准的和开箱即用的。如果有帮助,我可以提供所有三个请求的完整日志:authorize、token和userinfo


谢谢大家!

答案最终出现在DefaultClaimsProvider的自定义重写中,特别是在GetAccessTokenClaimsAsync方法中。该方法是手动组装要添加到令牌的声明列表,并方便地忽略openid的范围声明。我无法理解我们以前的实现在没有这个声明的情况下是如何工作的,但在将它添加回后,一切工作都很顺利。

scope参数的值表示为一个空格分隔、区分大小写的字符串列表。可能类似于:“范围”:“{openid}”或字符串[]范围=新字符串[]{“openid”};是的,我可以确认在授权请求期间客户端正在传递“openid”的范围。我尝试过添加其他值,如“openid配置文件”,但仍然会遇到相同的错误,即openid检查失败。
INFO  IdentityServer3.Core.Validation.AuthorizeRequestValidator Authorize request validation success
 {
  "ClientId": "{client_id}",
  "ClientName": "{client_name",
  "RedirectUri": "{redirect_uri}",
  "AllowedRedirectUris": [
    "{allowed_uri_which_matches_request}"
  ],
  "SubjectId": "{subject_id}",
  "ResponseType": "code",
  "ResponseMode": "query",
  "Flow": "AuthorizationCode",
  "RequestedScopes": "openid",
  "State": "{state_value}",
  "SessionId": "402a2356f0bd91a350dfd1f8779ea229",
  "Raw": {
    "response_type": "code",
    "client_id": "{client_id}",
    "redirect_uri": "{redirect_uri}",
    "scope": "openid",
    "state": "{state_value}"
  }
}