因此,我们有一个与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客户端...我如何还允许使用本机应用程序创建的承载令牌?
答案 0 :(得分:0)
您的应用程序似乎在aud
声明// audience
字段中正在验证客户端ID。此字段代表令牌的目标用户的应用ID。这意味着,如果您注册了新的本机应用程序注册,则为此API发行给该应用程序的令牌将具有相同的aud
声明。
在v1.0格式的令牌中,如果您的API试图验证令牌已发布,它们还具有appid
声明,该声明代表客户端应用程序(例如您的Web应用程序或本机应用程序)的应用程序ID给您的一位客户。
在v2.0令牌中,该声明为azp
。
请注意,在本机应用程序中,它被视为公共客户端,这意味着不能保证客户端的确切身份,因此命名为公共客户端。您的网络应用程序是一个机密客户,因此可以更强有力地保证appid
声明将是其声称的应用程序。
在这两种格式中,都有另一个声明(分别为appidacr
和azpacr
)代表客户类型。如果值是1
或2
,则可以放心使用,但是在0
的情况下要小心。
答案 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也很重要。
希望这对某人有帮助。