首页 > 解决方案 > 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-corejwtazure-active-directorytoken

解决方案


哦,我找到了答案。我错过了观众,这在 .NET Core 中是不同的:

.AddJwtBearer(jwtOptions =>
       {
           jwtOptions.Audience = "https://management.core.windows.net";
           jwtOptions.Authority = "https://login.microsoftonline.com/[myTenant]";
       });

推荐阅读