Azure AD - .Net Core 2 - 如何使用两个不同的客户端 ID?

Azure AD - .Net Core 2 - How can I use two different Client IDs?

因此,我们有一个 Web API,它与 Azure AD 和不记名令牌身份验证配合得很好。

在我的 ConfigureServices 中我有这个:

services.AddAuthentication(sharedOptions =>
{
    sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
    options.Audience = Configuration["Azure:AD:ClientId"];
    options.Authority = $"{Configuration["Azure:AD:Instance"]}{Configuration["Azure:AD:TenantId"]}";
});

我们将客户端 ID 设置为 Azure AD 中的 Web API 应用程序。

现在我们正在制作一个本机应用程序,我们还需要在 Azure AD 中有一个本机应用程序客户端 ID。我的 API 正在寻找 Web API 客户端...我如何同时允许使用本机应用程序创建的不记名令牌?

您的应用似乎正在查看 aud 声明// audience 字段以验证客户端 ID。此字段表示令牌适用于谁的应用程序 ID。这意味着如果您注册一个新的本机应用程序注册,则为此 API 向该应用程序颁发的令牌将具有相同的 aud 声明。

在 v1.0 格式的令牌中,它们还有一个 appid 声明,代表客户端应用程序(例如您的网络应用程序或本机应用程序)的 App ID,如果您的 API 正在尝试验证令牌已发给您的一位客户。

在 v2.0 令牌中,此声明为 azp

请注意,在本机应用程序的情况下,它被视为 public 客户端,这意味着无法保证客户端的确切身份,因此名称为 public 客户端。您的 Web 应用程序是机密客户端,因此更有力保证 appid 声明将是它声称的应用程序。

在这两种格式中,还有另一个声明(分别为 appidacrazpacr)代表客户端类型。如果值为 12,您可以有很高的信心,但在 0 的情况下应该小心。

Reference for tokens

好的!所以...我们成功了。

为了子孙后代,这就是我们最终所做的。

我们发现这个很好link:https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation

在第 2 步中,它告诉您更改 Web API URI - 我们最终不需要这样做...

关键的想法是将本机应用程序的权限添加到 Web API(#2 中的第二组步骤)。基本上,据我了解,它允许本机应用程序和 Web api 应用程序一起工作并在身份验证方面共享客户端 ID。

我们还发现在本机应用程序上编辑清单并使 "oauth2AllowImplicitFlow" = true 也很重要。

希望这对某人有所帮助。