场景:您的应用程序的 Web API(受 Azure AD 保护)从客户端应用程序 (React) 接收身份验证令牌,并且需要代表已登录用户调用下游 Web API (Microsoft Graph)。
Microsoft Docs 上的概念文档:您的方案完全符合 OAuth 2.0 代表流程,如 Microsoft Docs for Azure AD中所述 服务到服务调用在代表流程中使用委派的用户身份
代码示例:
重要代码
这就是你如何使用已经传入的令牌来获取一个新令牌,用它代表用户从你的 Web API 调用 Microsoft Graph API。
准备用户断言:
ClientCredential clientCred = new ClientCredential(clientId, appKey);
var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext;
string userName = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn) != null ? ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value : ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value;
string userAccessToken = bootstrapContext.Token;
UserAssertion userAssertion = new UserAssertion(userAccessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
获取 Microsoft Graph 的令牌:
result = await authContext.AcquireTokenAsync(graphResourceId, clientCred, userAssertion);