IdentityServer:在存储中找不到范围 openid 或请求的资源指示器不支持

问题描述 投票:0回答:1

我按照这个示例请求 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资源

c# authorization openid-connect duende-identity-server
1个回答
0
投票

基于评论。

IdentityResource
表中的
IdentityResources
被意外设置为针对
0
范围禁用 (
openid
),从而阻止其用作有效(在本例中是必需的)
scope
参数。

将其更改为启用 (

1
) 可修复该问题。

© www.soinside.com 2019 - 2024. All rights reserved.