我使用客户端凭据创建了本机APP
AuthenticationContext authContext = new AuthenticationContext(AUTHORITY, false, service);
ClientCredential clientCred = new ClientCredential(CLIENT_ID, "myclientsecret");
//Future<AuthenticationResult> future = authContext.acquireToken("https://graph.microsoft.com", clientCred, null);
Future<AuthenticationResult> future = authContext.acquireToken("https://graph.microsoft.com", clientCred, null);
权限是:
https://login.microsoftonline.com/{tenetID}/oauth2/authorize/
这很好,并获得了访问令牌。然后,我尝试通过将此令牌设置为Bearer Token来访问Azure Management REST API。
401未经授权
WWW-Authenticate: Bearer authorization_uri="https://login.windows.net/{tenentid}", error="invalid_token", error_description="Could not find identity for access token."
知道我在做什么错吗?
基于此create service principal文档,另一观察结果是,当我们在AD中添加应用程序时,该应用程序应显示在IAM->分配角色中,有些情况是我的应用程序未显示在其中。似乎我缺少一些关键步骤。
答案 0 :(得分:0)
如果要调用Azure Management REST API,则资源应在代码中为FALSE
,而不是Microsoft Graph API的https://management.azure.com
。
基于此创建服务主体文档,另一观察结果是,当我们在AD中添加应用程序时,该应用程序应显示在IAM->分配角色中,有些情况是我的应用程序未显示在其中。
在AAD中创建应用程序时,该应用程序不会自动添加到订阅的https://graph.microsoft.com
中,您需要手动将其添加为角色。导航到您的订阅中的Access control (IAM)
-> Access control (IAM)
-> Add
->按名称搜索您的服务主体(AD App)并选择一个角色(例如Add role assignment
) -> Owner
。