.net-core - Azure AD OAuth 2 验证令牌 .NET Core
问题描述
我现在正在开发一个微服务 .NET Core 项目。我们有一个 Azure AD,我们想要验证所有 Web APIs 微服务的请求。
有许多应用程序会调用我们的 Web API 项目。这些应用程序中的每一个都有自己的应用程序(ClientId 和客户端密码)。他们使用他们的数据生成令牌,然后在每个请求的标头中发送它。(到现在都没问题)
在我这边,我必须为每个请求验证令牌,但验证应该适用于来自不同应用程序的所有令牌。
所以,我试图将 JWTBarear 设置为接受任何令牌,但我对配置有点迷茫:
services.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(jwt =>
{
jwt.Authority = "https://login.microsoftonline.com/[myTenant]";
});
services.AddAuthorization(auth =>
{
auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser()
.Build());
});
并在配置中:
app.UseAuthentication();
app.UseMvc();
但是,我总是得到 401。我使用邮递员生成了令牌,它是有效的。
我对配置不是很好。我错过了什么吗?我在 Internet 上看到的所有示例都使用 ClientId,我有很多,而不仅仅是一个。
PS我不需要登录什么的,我只需要验证令牌。
谢谢!
解决方案
哦,我找到了答案。我错过了观众,这在 .NET Core 中是不同的:
.AddJwtBearer(jwtOptions =>
{
jwtOptions.Audience = "https://management.core.windows.net";
jwtOptions.Authority = "https://login.microsoftonline.com/[myTenant]";
});
推荐阅读
- javafx - 如何检测舞台外拖板的元素?
- sqlite - Pycharm Database for SQlite 将日期和日期时间列转换为长整数
- vba - 如何使用 VBA 关闭 Access 数据库并在同一实例、同一用户上打开一个新数据库?
- javascript - 如何合并 2 个对象,每个对象都包含一个对象数组?
- php - 我们应该在存储库模式中保存/更新模型吗?
- linux-kernel - 强制linux内核运行代码而不抢占
- node.js - Node.js 类型错误第一个参数必须是字符串或缓冲区
- google-bigquery - Google BigQuery ML 模型系数
- python - Using pandas, how to find the value counts by two columns
- html - 如何在注册前提交 Rails 表单