"api1" 是否在 Identityserver4 中预定义的客户端注册允许范围内?

Is "api1" in allowed scopes for client registration predefined in Identity server4?

我正在使用 Identity Server4。

我遵循快速入门并复制了一个场景,其中我有 3 个 Web 应用程序 1. MVC 网络应用 2. JS网页应用 3. API 应用

我还配置了 ASP.Net 身份以拥有持久的用户和客户端存储。

现在,我从 JS 网络应用程序的允许范围值中删除了一个范围 "api1",预计生成的令牌将没有此范围值。

但是当我尝试登录时,我什至无法查看页面,但在管道中的某个地方出现异常。

我之前的理解是,允许的范围是一堆字符串,资源应用程序可以在提供资源时将其用于授权目的。

任何人都可以解释为什么我面临这个问题或者我遗漏了什么吗?

如果我再次将 "api1" 范围添加到 JS 网络客户端,我就可以查看登录页面。

感谢您提供日志。当您从 javascript 客户端的允许范围中删除 api1 范围时,您删除了该客户端对该范围的访问。应用程序本身正在请求 api1,但它没有这样做的权限。因此,您需要从客户端编辑 javascript 客户端配置,以不请求 api1.

我将放弃您所说的关于遵循快速入门指南的内容,但是您在其中定义了客户端及其配置,它可能看起来像这样:

var config = {
    authority: "http://localhost:5000",
    client_id: "js",
    redirect_uri: "http://localhost:5003/callback.html",
    response_type: "id_token token",
    scope:"openid profile api1",  <--- REMOVE API1 HERE 
    post_logout_redirect_uri : "http://localhost:5003/index.html",
};
var mgr = new Oidc.UserManager(config);

请记住,客户必须明确(在大多数情况下)表达他们的范围要求,如果您未能满足任何资源范围要求,则请求将失败。所以你禁用了 js 客户端允许的范围,但它仍在请求它无权访问的范围。