.net core 5.0 with IdentityServer4 返回 api 方法 404

Posted

技术标签:

【中文标题】.net core 5.0 with IdentityServer4 返回 api 方法 404【英文标题】:.net core 5.0 with IdentityServer4 returns for api method 404 【发布时间】:2021-06-22 17:44:42 【问题描述】:

我在 GitHub 上设置了我的初始解决方案。

我设置了 swagger 授权以及 sql db 用户身份(程序获取正确的种子数据)并且程序让我获得授权。 但是当我调用我的方法 /WeatherForecast 它返回 404。

我的整个代码都在上面的 repo 链接上。请告诉我是否需要直接在此处附加一些代码。

Ofc,当我从我的 api 控制器中删除 [Authorize] 注释时,我可以到达方法(进入方法)

我还阅读了关于app.UseAuthentication; app.UseAuthorization 的 Startup 类中的顺序有多重要,我也检查了这一点。

我不知道我还需要做什么才能获得 SuccessCode 200。

对于那些想从我的 github repo 本地运行它的人:

appsettings.Development -> 只需指向本地 sql db 服务器和空数据库即可开始播种数据。

client_id:大客户 client_secret: 秘密

请检查两个范围(读、写)

【问题讨论】:

问题需要独立。 对不起,我听不懂你的评论? 您的问题不能依赖外部链接来回答问题,您可以提供外部链接作为额外信息。 API 看起来您正在尝试将 IdentityServer 合并到 API 本身中。所以你的 repo 中的 IdentityServer 项目不是问题的一部分,对吧? 是的,我试图将所有内容集中在一个项目(webapi)中控制器,在我看来它根本找不到它(404 错误) 【参考方案1】:

您似乎想使用 Client Credentials flow 来验证您的 API 的 Swagger...至少,这是您添加到 Swagger here 的安全定义。

但是,正如您从流程解释的链接中看到的那样,这需要您的 Identity Server 和您的 Fancy API 相互交谈。因此,它们必须是两个独立运行的 API。因此,您不应在 Fancy API 中添加/使用所有 Identity Server 接线。

您的 Swagger 和您的 API 进行身份验证的权限(正如您在 authorization and token URLs 中定义的那样)必须是该 Identity Server。

此外,您的 API 身份验证已注释掉 here - 并且具有与 Swagger 不同的权限 - 因此您似乎没有使用您收到的令牌。但是,您然后添加授权here。

IdentityServer4 存储库有一些非常好的示例来指导我们,包括一个用于客户端凭据流的示例here。这当然可以帮助你:)

【讨论】:

以上是关于.net core 5.0 with IdentityServer4 返回 api 方法 404的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core 身份在 .Net Core 5.0 中添加公司名称作为用户登录过程的一部分

为 ASP.NET Core 5.0 - EF Core 5.0 Web App 配置 PostgreSQL 连接字符串以在 MS 或 Linux 云上运行?

Workflow Core + asp.net core 5.0 实现简单审批工作流

.Net Core 3.1 和 .Net 5.0 是不是支持 XPath 2.0?

ASP.NET CORE 5.0 Identity 显示当前登录用户

如何将 Azure Functions v3 迁移到 .net core 5.0