oauth-2.0 400尝试使用OnBehalfOf Flow对MS Graph进行身份验证时出错

dly7yett  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(150)

我目前正在开发一个用于Outlook的TypeScript加载项,它使用Microsoft Graph API,并且正在使用代表身份验证流。
以下Microsoft文档及其代码示例生成了此代码:

let userTokenEncoded = await OfficeRuntime.auth.getAccessToken({
   forMSGraphAccess: true,
   allowSignInPrompt: true,
   allowConsentPrompt: true
});

const form = new FormData();
form.set("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer");
form.set("client_id","XXXXXXXXXXXXXXXXX");
form.set("client_secret", "XXXXXXXXXXXXXXXXXXX");
form.set("assertion", userTokenEncoded);
form.set("scope", "https://graph.microsoft.com/.default");
form.set("requested_token_use", "on_behalf_of");

const accessToken = await fetch("https://login.microsoftonline.com/XXXXXXXXXXXXXX/oauth2/v2.0/token", {
   method: "POST",
   body: form
});

// MS Graph Endpoint Access Here

这会给我一个400 Bad Request错误。
不过,在Postman中做同样的事情没有任何问题。我可以完美地使用MS Graph API的访问令牌。

9avjhtql

9avjhtql1#

令牌兑换有两种情况(使用authorization_code模式):从Web应用程序和从单页应用程序(PKCE)。
使用SPA时,Azure Identity要求令牌兑换来自浏览器(而不是Web服务器)。代码交换的请求必须包含“Origin”标头。如果不包含,则会收到错误:“为”单页应用程序“客户端类型颁发的令牌只能通过跨源请求兑换”

您可以参考Microsoft官方文档-https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app,this,应该有助于解决此问题。
代码示例-https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples

相关问题