【问题标题】:Azure AD OAuth 2 validate token .NET CoreAzure AD OAuth 2 验证令牌 .NET Core
【发布时间】:2019-03-23 04:52:24
【问题描述】:

我现在正在开发一个微服务 .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。我使用邮递员生成了令牌,它是有效的。

我对配置不是很好。我错过了什么吗? 我在互联网上看到的所有示例都使用 ClientId,我有很多,而不仅仅是一个。

附:我不需要登录什么的,我只需要验证令牌。

谢谢!

【问题讨论】:

  • 您需要在 ValidAudiences 中指定他们的所有 ID。但为什么该 API 允许使用其他 API 的令牌?
  • @juunas 是的,我刚刚发现。我从昨天开始一直在搜索,我在 .NET Core 中找到了 Audience。它现在有效,请在那里查看我的答案。感谢您的回复

标签: .net-core jwt azure-active-directory token


【解决方案1】:

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

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

【讨论】:

  • 验证不适合 your 服务的令牌是非常糟糕的做法。您不得阅读任何并非专门用于您的服务的令牌。在上面的示例中,您接受 Azure 管理 API 的受众值,这不是您控制的服务。 Microsoft 可以决定随时更改其服务的令牌格式(例如添加加密),这不会导致您的解决方案出现任何问题。
  • 来自4.1.3 of RFC 7519 JSON Web Token:“如果处理该声明的主体在此声明存在时未使用“aud”声明中的值标识自己,则必须拒绝 JWT。”
  • 哦,这很关键。但是,你有什么建议。因为我有多个应用程序,都属于同一个 Azure AD。 @PhilippeSignoret
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 2021-06-27
相关资源
最近更新 更多