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

时间:2018-10-09 13:00:35

标签: azure azure-active-directory .net-core-2.0

因此,我们有一个与Azure AD和承载令牌身份验证配合使用的Web API。

在我的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客户端...我如何还允许使用本机应用程序创建的承载令牌?

2 个答案:

答案 0 :(得分:0)

您的应用程序似乎在aud声明// audience字段中正在验证客户端ID。此字段代表令牌的目标用户的应用ID。这意味着,如果您注册了新的本机应用程序注册,则为此API发行给该应用程序的令牌将具有相同的aud声明。

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

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

请注意,在本机应用程序中,它被视为公共客户端,这意味着不能保证客户端的确切身份,因此命名为公共客户端。您的网络应用程序是一个机密客户,因此可以更强有力地保证appid声明将是其声称的应用程序。

在这两种格式中,都有另一个声明(分别为appidacrazpacr)代表客户类型。如果值是12,则可以放心使用,但是在0的情况下要小心。

Reference for tokens

答案 1 :(得分:0)

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

为了后代,这就是我们最终要做的事情。

我们找到了以下很好的链接:https://github.com/Azure-Samples/active-directory-dotnet-webapi-manual-jwt-validation

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

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

我们还发现,在Native应用程序上编辑清单并使“ oauth2AllowImplicitFlow” = true也很重要。

希望这对某人有帮助。