C# 用户信息终结点未找到openid作用域
我正在使用AuthorizationCode流将IdentityServer 3的实现配置为新客户端应用程序(Salesforce Communities)的身份提供者。在客户端到达userinfo端点之前,一切都按预期工作,此时会发生以下错误: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作
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}"
}
}