gpt4 book ai didi

openid - Thinktecture "insufficient_scope"错误。单一范围声明与范围列表

转载 作者:行者123 更新时间:2023-12-01 15:17:49 29 4
gpt4 key购买 nike

我确信答案是显而易见的,但目前我还不知道。

当我的代码尝试调用/connect/userinfo 并且消息是“insufficient_scope”时,我得到了 403。

https://github.com/IdentityServer/IdentityServer3/blob/master/source/Core/Validation/TokenValidator.cs#L153

上面的代码行检查 JWT 中的范围声明,并希望找到“openid”的值以使/connect/userinfo 端点正常工作。

在我的 JWT 中,如果它有类似的东西:

"scope": "openid"

...那么端点就可以了。相反,如果我有:

"scope": ["openid", "email", "profile"]

...然后它失败了。

我是否应该永远没有范围声明的列表/数组?也许我在某处缺少配置设置?

用代码更新

对不起。当然代码会让问题更清楚。

客户端存储

    public ClientStore()
{
_clients = new List<Client>
{
new Client
{
AlwaysSendClientClaims = true,
RequireConsent = false,
Enabled = true,
ClientName = @"MVC Client",
ClientId = @"mvc",
PostLogoutRedirectUris = new List<string>
{
"http://localhost:8080/index.html"
},
RedirectUris = new List<string>
{
"http://localhost:8080/loginCallback.html"
}
}
};
}

范围商店

    public ScopeStore()
{
var scopes = new List<Scope>
{
StandardScopes.OpenId,
StandardScopes.Profile,
StandardScopes.Email,
StandardScopes.Address,
StandardScopes.AllClaims,
StandardScopes.RolesAlwaysInclude
};

_scopes = scopes;
}

Startup.cs

        var certFile = env.ApplicationBasePath + "/cert.pfx";

app.Map("/core", core =>
{
var factory = new IdentityServerServiceFactory();

var configuration = new Configuration();
configuration.AddJsonFile("config.json");

var userService = new EndUserService(configuration.Get("ConnectionString"));
factory.UserService = new Registration<IUserService>(resolver => userService);

var scopeStore = new ScopeStore();
factory.ScopeStore = new Registration<IScopeStore>(resolver => scopeStore);

var clientStore = new ClientStore();
factory.ClientStore = new Registration<IClientStore>(resolver => clientStore);

var cert = new X509Certificate2(certFile, "test");

var idsrvOptions = new IdentityServerOptions
{
CorsPolicy = CorsPolicy.AllowAll,
Factory = factory,
RequireSsl = false,
SigningCertificate = cert,
LoggingOptions = new LoggingOptions() {
EnableWebApiDiagnostics = true,
EnableHttpLogging = true
}
};

core.UseIdentityServer(idsrvOptions);
});

Login.html

var config = {
client_id: "mvc",
redirect_uri: "http://localhost:8080/loginCallback.html",
response_type: "id_token token",
scope: "openid email profile",
authority: "http://localhost:44319/core",
post_logout_redirect_uri: "http://localhost:8080/index.html"
};
var mgr = new OidcTokenManager(config);

更新 #2

好吧,这是 Mono 与 Windows 的对比。在 Windows 中工作正常,在 Mono 中损坏。显然已知问题:https://github.com/IdentityServer/IdentityServer3/issues/1373#issuecomment-104756822

最佳答案

事实证明,Microsoft 的 JWT 库在解释 JWT 声明时存在一个错误。此处描述:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/pull/153

等待该拉取请求被接受或以其他方式解决问题。

关于openid - Thinktecture "insufficient_scope"错误。单一范围声明与范围列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382464/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com