在这样的场景中: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,因此这没有意义。
有人有想法吗?
答案 0 :(得分:0)
OAuth 2.0 On-Behalf-Of流程是通过请求链传播委派的用户身份和权限。对于向下游服务发出经过身份验证的请求的中间层服务,它需要代表用户从Azure Active Directory(Azure AD)保护访问令牌。
在您的方案中,您可以使用client credential flow在服务应用中获取Office 365 api的令牌,而无需任何人工交互,例如交互式登录对话框。
请点击此处了解有关Authentication Scenarios for Azure AD。
的更多详情