代表客户端应用程序向Azure AD进行身份验证

时间:2017-07-24 09:39:45

标签: azure azure-active-directory adal office365api

在这样的场景中:https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof

我想代表客户端而不是用户在后端对Azure AD进行身份验证。我无法在符合此案例的文档中找到合适的示例。

那我在做什么?

在客户端:

var authContext = new AuthenticationContext(authorityUrl);
var result = authContext.AcquireTokenAsync(webServiceUri, new ClientCredential(nativeClientId, nativeClientSecret)).GetAwaiter().GetResult();

在后端服务中:

var authContext = new AuthenticationContext(authorityUrl);
var result = authContext.AcquireTokenAsync(office365ResourceUri, new ClientAssertion(webClientId, result.AccessToken))

这会引发以下异常:

AADSTS70002: Client assertion application identifier doesn't match 'client_id' parameter.

只有当我从客户端指向后端的同一服务(引用自身!)时才会成功:

authContext.AcquireTokenAsync(webServiceUri, new ClientAssertion(nativeClientId, result.AccessToken))

但是,由于服务必须转到Office 365 API,因此这没有意义。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

OAuth 2.0 On-Behalf-Of流程是通过请求链传播委派的用户身份和权限。对于向下游服务发出经过身份验证的请求的中间层服务,它需要代表用户从Azure Active Directory(Azure AD)保护访问令牌。

在您的方案中,您可以使用client credential flow在服务应用中获取Office 365 api的令牌,而无需任何人工交互,例如交互式登录对话框。

请点击此处了解有关Authentication Scenarios for Azure AD

的更多详情