簡體   English   中英

Microsoft Graph:跨域令牌兌換僅適用於“單頁應用程序”

[英]Microsoft Graph: Cross-origin token redemption is permitted only for the 'Single-Page Application

我想在 Microsoft Graph 中的文檔授權和登錄 OneDrive 之后兌換訪問令牌的代碼

這是我用於此步驟的 API

發布 https://login.microsoftonline.com/common/oauth2/v2.0/token

我已經在 Postman 上測試了 API,它工作正常。

在 Postman 上測試兌換代碼在此處輸入圖像描述

但是,當我嘗試使用我的代碼 JavaScript 時,我收到錯誤消息“僅允許‘單頁應用程序’進行跨域令牌兌換”,

{
   "error":"invalid_request",
   "error_description":"AADSTS90023: Cross-origin token redemption is permitted only for the 'Single-Page Application' client-type.\r\nTrace ID: 57ebcf82-278c-4375-a4db-b81ab567fc00\r\nCorrelation ID: 5a80b3fa-1e0d-4265-8fbe-5e22df198bee\r\nTimestamp: 2021-04-26 10:26:36Z",
   "error_codes":[
      90023
   ],
   "timestamp":"2021-04-26 10:26:36Z",
   "trace_id":"57ebcf82-278c-4375-a4db-b81ab567fc00",
   "correlation_id":"5a80b3fa-1e0d-4265-8fbe-5e22df198bee"
}

所以,我試圖通過添加 header 來解決這個問題,但它不起作用。 以下是我的編碼。 我的 web 托管在 firebase 上。

function RedeemToken(){
    var myHeaders = new Headers();
    myHeaders.append("Access-Control-Allow-Origin", "*");
    myHeaders.append("Access-Control-Allow-Methods", "POST");
    myHeaders.append("Access-Control-Allow-Headers", "Content-Type");
    myHeaders.append("Access-Control-Max-Age", "3600");
    myHeaders.append("Content-Type", "application/x-www-form-urlencoded");

    var urlencoded = new URLSearchParams();
    urlencoded.append("client_id", "XXXX");
    urlencoded.append("redirect_uri", "https://XXXX.web.app/LinkToAuthen.html");
    urlencoded.append("client_secret", "XXXX");
    urlencoded.append("code", XXXX);
    urlencoded.append("grant_type", "authorization_code");

    var requestOptions = {
      method: 'POST',
      headers: myHeaders,
      body: urlencoded,
      redirect: 'follow'
    };

    fetch("https://login.microsoftonline.com/common/oauth2/v2.0/token", requestOptions)
      .then(response => response.text())
      .then(result => console.log(result))
      .catch(error => console.log('error', error));
}

更改 App 注冊 -> 身份驗證 -> 平台類型應為 SPA 而不是 Web 或反之亦然。

我在 Angular 項目中遇到了同樣的 SSO 問題,就我而言,我創建了一個錯誤的平台(即 Web)。 一旦我創建了一個平台“單頁應用程序”。 它對我來說很好。

用於創建平台的文檔 URL: https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-app-registration

用於 angular 集成的文檔 URL: https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-auth-code

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM