我按照这个示例请求 GET。就我而言,就是这个。
获取/连接/授权?
client_id=tyr-idp&
范围=openid&
响应类型=代码&
redirect_uri=https://localhost_4200/login&
状态=检查123
客户端将授权类型设置为authorization_code(此外,还设置了重定向 URI,并且禁用了客户端机密要求)。我已将范围 oidc 添加到客户端的声明中,并创建了一个名为 oidc 的身份资源(如本文中所述)。
select * from IdentityResources
生成一行,其中列 Scope
为 oidc,ClientId
为 13(这是客户端的 ID)。我还向资源添加了声明:第一个资源的默认 sub 以及其他资源的一些自定义资源。
由于某种原因,日志显示 Duende 无法将该范围连接到我的请求,并给出以下错误。创建额外的身份资源(并在范围下请求它们)会为每个资源生成一条错误消息,说明未找到或不支持该资源的等效问题。
在商店中找不到范围 openid 或请求的资源指标不支持。
执行以下命令,显示有两个具有预期名称和值的范围。
Client client = context.Clients
.Include(a=>a.AllowedGrantTypes)
.Include(a=>a.AllowedScopes)
.Include(a=>a.RedirectUris)
.First(a => a.ClientId == "tyr-idp");
谷歌搜索这个问题没有产生任何我认为有用的结果。我也对提到的双重根本原因感到困惑:是因为我没有正确声明范围还是因为我没有正确连接它?
不知道如何进一步排除故障。
我还尝试手动将新客户端放入上下文中,但结果相同,但失败了。
Client client = new()
{
ClientId = "client_id",
ClientName = "client_name",
RequireClientSecret = false,
RequirePkce = false,
AllowOfflineAccess = true,
AllowedGrantTypes = new(){ new(){ GrantType = "authorization_code" }},
AllowedScopes = new(){ new() { Scope = "openid" } , new() { Scope = "oidc" } },
RedirectUris = new(){ new(){ RedirectUri = "https://localhost:4200/login" } }
};
context.Clients.Add(client);
context.SaveChanges();
编辑
要求
GET /connect/authorize?client_id=tyr-idp&scope=tyr-trifecta&response_type=code&redirect_uri=https://localhost:7101/spa
客户范围
API资源
ID资源
基于评论。
IdentityResource
表中的 IdentityResources
被意外设置为针对 0
范围禁用 (openid
),从而阻止其用作有效(在本例中是必需的)scope
参数。
将其更改为启用 (
1
) 可修复该问题。