Outlook Office 365: โทเค็นการรีเฟรชล้มเหลวในการดึงข้อมูลเนื่องจาก AADSTS70000 ค่าที่ให้ไว้สำหรับพารามิเตอร์ 'รหัส' ไม่ถูกต้อง

ในโค้ดด้านล่าง ฉันสามารถดึงโทเค็นการรีเฟรชได้จากที่อยู่อีเมล [email protected] อย่างไรก็ตาม เมื่อฉันพยายามเข้าสู่ระบบด้วย [email protected] มันไม่ให้โทเค็นการรีเฟรช แต่กลับตอบกลับมา

การตอบสนอง:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70000: The provided value for the 'code' parameter is not valid. The code has expired.\r\nTrace ID: ...\r\nCorrelation ID: ...\r\nTimestamp: 2016-05-19 10:13:05Z",
  "error_codes": [
    70000
  ],
  "timestamp": "2016-05-19 10:13:05Z",
  "trace_id": "8cceb393-....",
  "correlation_id": "5227de8...."
}

รหัส:

 private async Task<string> GetRefreshRoken(string authCode, string onSuccessRedirectUri) {
        var client = new HttpClient();
        var parameters = new Dictionary<string, string>
       {
          {"client_id", _clientId},
          {"client_secret", _clientSecret},
          {"code",authCode }, // what retreived from //https://login.microsoftonline.com/common with authroization.
          {"redirect_uri",  onSuccessRedirectUri}, //http://localhost:27592/Home/Authorize
          {"grant_type","authorization_code" }
       };
        var content = new FormUrlEncodedContent(parameters);
        var response = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/v2.0/token", content);
        var tokensJsonString = await response.Content.ReadAsStringAsync();
        dynamic token = Newtonsoft.Json.JsonConvert.DeserializeObject(tokensJsonString);
        return token.refresh_token;
    }

ดังนั้นฉันจึงค้นหาหมายเลขข้อผิดพลาดใน Google และพบ http://www.matvelloso.com/2015/01/30/troubleshooting-common-azure-active-directory-errors/ หน้าที่อธิบายข้อผิดพลาด: ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นฉันได้เปลี่ยน URL การเปลี่ยนเส้นทางเป็น "http://localhost:27592/Home/Authorize/ ". เนื่องจากฉันใช้ https://dev.outlook.com/restapi/tutorial/dotnet บทช่วยสอนเป็นข้อมูลอ้างอิง ตอนนี้ฉันไม่สามารถเข้าสู่ระบบด้วยบัญชีอื่นได้

ป้อนคำอธิบายรูปภาพที่นี่

มีวิธีที่ดีในการดึงโทเค็นการรีเฟรชสำหรับบัญชี Outlook หรือไม่?


person Md. Alim Ul Karim    schedule 19.05.2016    source แหล่งที่มา


คำตอบ (1)


สำหรับบัญชี windows live id คุณจะได้รับข้อผิดพลาด "ค่าที่ระบุสำหรับพารามิเตอร์ 'รหัส' ไม่ถูกต้อง รหัสหมดอายุแล้ว" เมื่อใช้รหัสอนุญาตสองครั้ง

วิธีที่ถูกต้องในการรีเฟรชโทเค็นคือการใช้โทเค็นการรีเฟรช (การอ้างอิงโทเค็น v2.0 > รีเฟรชโทเค็น)

ขั้นแรก ตรวจสอบให้แน่ใจว่าคุณได้ประกาศขอบเขต "offline_access" แล้ว

จากนั้น คุณจะได้รับ access_token เมื่อได้รับโทเค็นโดยใช้ grant_type=code (ครั้งแรกที่คุณได้รับโทเค็น)

ถัดไป คุณต้องใช้ grant_type=refresh_token เพื่อรีเฟรชโทเค็นการเข้าถึงของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

person Jeffrey Chen    schedule 20.05.2016
comment
ให้ฉันลองแล้วติดต่อกลับไปในวันอังคาร... ขอบคุณอีกครั้งสำหรับความช่วยเหลือของคุณ ขณะนี้ฉันกำลังอยู่ในช่วงวันหยุด - person Md. Alim Ul Karim; 22.05.2016
comment
หลังจากเพิ่ม offline_access ในขอบเขตจะมีข้อความว่า: API ไม่ยอมรับ offline_access เป็นขอบเขตที่ผู้ใช้ให้ไว้ - person Md. Alim Ul Karim; 24.05.2016
comment
ฉันคิดว่าคุณใช้ Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory หากเป็นเช่นนั้น ขอบเขต openid และ offline_access จะถูกเพิ่มตามค่าเริ่มต้น แต่จากโค้ดที่คุณโพสต์ ฉันไม่เห็นคุณใช้ไลบรารีนั้น - person Jeffrey Chen; 24.05.2016
comment
ใช่ ขณะนี้ฉันใช้ Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory ตอนนี้ปัญหาคือบางครั้งมันให้โทเค็นการรีเฟรชและบางครั้งก็ไม่ได้ - person Md. Alim Ul Karim; 24.05.2016
comment
หากต้องการจำกัดปัญหานี้ ให้ลองใช้วิธีร้องขอ HTTP แทนการใช้ Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory ขั้นแรก ตรวจสอบให้แน่ใจว่าโฟลว์โทเค็นการรีเฟรชจะทำงานเคียงข้างคุณ หลังจากนั้น เราสามารถพูดคุยได้ว่าเหตุใดบางครั้งรีเฟรช_token จึงไม่ส่งคืนในเซสชันใหม่ - person Jeffrey Chen; 24.05.2016
comment
คุณช่วยชี้ให้ฉันไปที่ url เพื่อใช้ http flow นั้นได้ไหม ฉันมีรหัสของฉันที่นี่: github.com/auggit/Google-Outlook-Calender-Integrate/blob/master/ - person Md. Alim Ul Karim; 24.05.2016