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

代表客户端应用程序向Azure AD进行身份验证,azure,azure-active-directory,adal,office365api,Azure,Azure Active Directory,Adal,Office365api,在这种情况下: 我想代表客户端而不是用户在后端对Azure AD进行身份验证。我在文档中找不到适合这种情况的适当示例 那我在干什么 在客户端: var authContext = new AuthenticationContext(authorityUrl); var result = authContext.AcquireTokenAsync(webServiceUri, new ClientCredential(nativeClientId, nativeClientSecret)).Get

在这种情况下:

我想代表客户端而不是用户在后端对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))
在后端服务中:

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


有人有想法吗?

代表flow的OAuth 2.0将通过请求链传播委托用户身份和权限。为了让中间层服务向下游服务发出经过身份验证的请求,它需要代表用户保护来自Azure Active Directory(Azure AD)的访问令牌

在您的场景中,您可以使用为服务应用程序中的office 365 api获取令牌,而无需任何人工交互,如交互式登录对话框


请单击此处了解更多有关的详细信息。

代表flow的OAuth 2.0将通过请求链传播委托用户身份和权限。为了让中间层服务向下游服务发出经过身份验证的请求,它需要代表用户保护来自Azure Active Directory(Azure AD)的访问令牌

在您的场景中,您可以使用为服务应用程序中的office 365 api获取令牌,而无需任何人工交互,如交互式登录对话框


请单击此处了解有关的更多详细信息。

您是否找到过此问题的答案?我还试图为客户端应用程序而不是用户获取OBO令牌。我没有找到任何资源来说明如何做到这一点。你有没有找到答案?我还试图为客户端应用程序而不是用户获取OBO令牌。我没有找到任何资源来说明如何做到这一点。