我们有一个 .net core 应用程序,它使用 Azure AD 进行身份验证 (MSAL/v2.0)。我们希望 Linux 应用程序能够从第一个应用程序访问 API。第二个应用程序没有用户上下文,并且将像curl 脚本一样进行交互。
通过阅读文档,我认为我应该使用 azure ad 注册第二个应用程序。我可以获得将目标应用程序作为受众的 JWT 令牌,但无法访问 api。我们已经能够使用从登录用户捕获的访问令牌从脚本访问(真实)api。
我创建了一个测试环境来寻找解决方案。
创建了一个由azure ad验证的.net core项目。它从我的工作站本地运行,未部署到天蓝色。Azure 身份验证适用于交互式用户。
注册了第二个应用程序并为其创建了一个秘密。
第一个应用程序配置了 id 和访问令牌以进行隐式授予,但未将其设置为公共客户端。
我在清单中定义了一个 approle“access_as_application”。
在“公开 API”下,我创建了一个范围“api”,并将另一个应用程序添加为授权客户端应用程序。
在 API 权限下,我添加了一个权限,选择了应用程序权限并检查了我之前创建的 approle。
我可以运行一个curl脚本并检索一个不记名令牌,该令牌在解码时会显示与我的应用程序匹配的受众。当我在curl 脚本中使用该令牌时,它会被重定向以登录。
显现:
{
"id": "33b*******************************",
"acceptMappedClaims": null,
"accessTokenAcceptedVersion": 2,
"addIns": [],
"allowPublicClient": null,
"appId": "3d8*******************************",
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Access webapp as an application.",
"displayName": "access_as_application",
"id": "ff5ea9b2*******************************",",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "access_as_application"
}
],
"oauth2AllowUrlPathMatching": …Run Code Online (Sandbox Code Playgroud)