【发布时间】:2021-04-15 14:22:30
【问题描述】:
我在 Azure 中注册了两个应用程序,一个 REST API 和一个调用 REST API 的守护程序控制台应用程序。 显示工作流程
Daemon console app --call for token using secret--> Azure AD
Daemon console app use the return token to call --> REST API.
我确实获得了令牌,并且在 REST API 中定义了正确的 AppRole,并征得了管理员的同意。 但是,当我尝试调用 REST API 守护程序控制台应用程序时会抛出此错误
Failed to call the web API: InternalServerError
Content: System.ArgumentException: Requested value 'ApplicationRole' was not found.
at System.Enum.TryParseByName(RuntimeType enumType, String originalValueString, ReadOnlySpan`1 value, Boolean ignoreCase, Boolean throwOnFailure, UInt64& result)
我在这里关注了官方的 MS 文档 https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/2-Call-OwnApi
我解码了它所定义角色的 JWT 令牌:
...
"oid": "xxxxx",
"rh": "xxxx",
"roles": [
"ApplicationRole"
],
...
REST API 的 Manifest 文件
...
appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Daemon apps in this role can consume the web api.",
"displayName": "ApplicationRole",
"id": "unique uid",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "ApplicationRole"
}
],
...
管理员同意也被授予守护进程控制台应用程序
API / Permissions name Type Description Admin consent require Status
IoT-Manager (1)
ApplicationRole Application ApplicationRole Yes Granted for XX
这里有什么问题?
更新
我调试 Daemon 应用程序发现访问令牌不包含角色
...
AuthenticationResult result = null;
try
{
result = await app.AcquireTokenForClient(scopes)
.ExecuteAsync();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Token acquired \n");
Console.WriteLine(result.AccessToken);
Console.WriteLine("Token ExpireOn \n");
Console.WriteLine(result.ExpiresOn);
Console.ResetColor();
}
...
当我打印访问令牌并对其进行解码时,它显示它具有 AppRoles,而当我调试对象时 AuthenticationResult result 没有角色属性。
【问题讨论】:
-
虽然你有一个“正确”的令牌,但我还是想再检查一次。如果您创建了一个暴露 api 并添加应用程序角色的天蓝色广告应用程序(代表服务)?如果您创建了另一个同意刚刚暴露的api权限的Azure广告应用程序(代表客户)?如果您在守护程序应用程序中设置第二个应用程序的客户端 ID 和密码?我想我需要运行您提供的示例并尝试重现您的错误。
-
我在 Azure 中创建了一个 REST API 应用程序,它公开了一个没有范围的 API (api;//
),因为这意味着仅供应用程序使用。以及 Azure 中配置为使用该 API 的另一个客户端应用程序。 -
对不起,我的回复晚了,我已经在我的地方测试了样品,这是工作结果。 i.stack.imgur.com/Bec7d.png
-
我已经添加了我的步骤,您可以将我的设置与您的设置进行比较,以检查是否有一些差异,这可能会导致错误。如果存在,请随时分享您的进一步问题:)
标签: azure api azure-active-directory console-application msal