C# 当ApprovalSignmentRequired=true时,本机应用程序的Azure AD:AcquireTokenAsync失败
我们在Azure AD中有一个注册的Web应用程序,需要有效的承载OAuth令牌才能继续。通常,身份验证流来自Javascript UI,OAuth令牌从中间件传递到目标Web API REST服务应用程序,它根据C# 当ApprovalSignmentRequired=true时,本机应用程序的Azure AD:AcquireTokenAsync失败,c#,azure,azure-active-directory,azure-ad-graph-api,C#,Azure,Azure Active Directory,Azure Ad Graph Api,我们在Azure AD中有一个注册的Web应用程序,需要有效的承载OAuth令牌才能继续。通常,身份验证流来自Javascript UI,OAuth令牌从中间件传递到目标Web API REST服务应用程序,它根据有效性验证令牌,一切都很正常 现在,我们有一个非用户消费者:另一个需要访问此应用程序的服务。为此,我们在Azure AD中创建了一个新的“本机”应用程序,该应用程序具有用于身份验证的密钥(机密)。该应用程序有三个API权限:Azure Active Directory、Windows
有效性验证令牌,一切都很正常
现在,我们有一个非用户消费者:另一个需要访问此应用程序的服务。为此,我们在Azure AD中创建了一个新的“本机”应用程序,该应用程序具有用于身份验证的密钥(机密)。该应用程序有三个API权限:Azure Active Directory
、Windows Azure服务管理API
和要访问的应用程序
为了获取新应用程序的身份验证令牌,我们使用以下代码:
private static async Task<string> Authenticate(
string tenant, string clientId,
string appKey, string resource)
{
var authority = $"https://login.windows.net/{tenant}/oauth2/token";
var credential = new ClientCredential(clientId, appKey);
var authContext = new AuthenticationContext(authority);
var result = await authContext.AcquireTokenAsync(resource, credential);
return result.AccessToken;
}
(id
是目标应用程序的服务主体,加上请求应具有有效的承载令牌)
不幸的是,我们无法找到任何方法将应用程序(服务主体)添加到此列表中
我们尝试了Azure广告图(Graph.windows.net)和Microsoft Graph API(Graph.Microsoft.com)。第一种方法在中提到,并在注释中指出它已损坏:
注意:当前服务主体对资源的分配已中断,我们将努力解决此问题,并在修复后更新此帖子
第二种方法被记录在案,并被引用,再次提到有一个bug
我是不是错过了一些很简单的东西?批准是否支持添加应用程序?它能解决我们的受限访问问题吗
谢谢,
Vitaly我们可以使用ApprovaliseSignations
将服务主体分配给另一个,而不是使用ApprovaliseSignedTo
以下是供您参考的样本:
POST: https://graph.windows.net/{tenantId}/servicePrincipals/{naiveServicePrincipalId}/appRoleAssignments?api-version=1.6
content-type: application/json
{
"id":"00000000-0000-0000-0000-000000000000",
"principalId":"{naiveServicePrincipalId}",
"principalType":"ServicePrincipa",
"resourceId":"{webAPIServicePrincipalId}"
}
POST: https://graph.windows.net/{tenantId}/servicePrincipals/{naiveServicePrincipalId}/appRoleAssignments?api-version=1.6
content-type: application/json
{
"id":"00000000-0000-0000-0000-000000000000",
"principalId":"{naiveServicePrincipalId}",
"principalType":"ServicePrincipa",
"resourceId":"{webAPIServicePrincipalId}"
}