Outlook Office 365 : Token penyegaran gagal diambil karena AADSTS70000 nilai yang diberikan untuk parameter 'kode' tidak valid

Dalam kode di bawah ini saya berhasil mengambil token penyegaran dari alamat email [email protected]. Namun, ketika saya mencoba masuk dengan [email protected], ia tidak memberikan token penyegaran, melainkan mengembalikan respons ini.

Tanggapan:

{
  "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...."
}

Kode:

 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;
    }

Jadi saya mencari di Google dengan nomor kesalahan dan menemukan http://www.matvelloso.com/2015/01/30/troubleshooting-common-azure-active-directory-errors/ halaman yang menjelaskan kesalahan: masukkan deskripsi gambar di sini

Kemudian saya mengubah url pengalihan saya menjadi "http://localhost:27592/Home/Authorize/ ". Karena saya menggunakan https://dev.outlook.com/restapi/tutorial/dotnet tutorial sebagai referensi, sekarang saya tidak bisa login dengan akun lain.

masukkan deskripsi gambar di sini

Apakah ada pendekatan yang baik untuk mengambil token penyegaran untuk akun Outlook?


person Md. Alim Ul Karim    schedule 19.05.2016    source sumber


Jawaban (1)


Untuk akun windows live id, Anda akan mendapatkan error "Nilai yang diberikan untuk parameter 'kode' tidak valid. Kode telah kedaluwarsa." saat menggunakan kode otorisasi dua kali.

Cara yang benar untuk menyegarkan token adalah menggunakan token penyegaran (referensi token v2.0 > Segarkan Token).

Pertama, pastikan Anda telah mendeklarasikan cakupan "offline_access".

Kemudian, Anda akan mendapatkan access_token saat memperoleh token menggunakan grant_type=code (pertama kali Anda memperoleh token).

Selanjutnya, Anda perlu menggunakan grant_type=refresh_token untuk menyegarkan token akses Anda.

masukkan deskripsi gambar di sini

person Jeffrey Chen    schedule 20.05.2016
comment
Izinkan saya mencoba dan menghubungi Anda kembali pada hari Selasa... Sekali lagi terima kasih atas bantuan Anda. Saat ini saya sedang berlibur. - person Md. Alim Ul Karim; 22.05.2016
comment
Setelah menambahkan offline_access dalam cakupan dikatakan: API tidak menerima offline_access sebagai cakupan yang disediakan pengguna - person Md. Alim Ul Karim; 24.05.2016
comment
Saya berasumsi Anda menggunakan Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory, jika demikian, cakupan openid dan offline_access ditambahkan secara default. Namun dari kode yang Anda posting, saya tidak melihat Anda menggunakan perpustakaan itu. - person Jeffrey Chen; 24.05.2016
comment
Ya, saat ini saya menggunakan Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory . Sekarang masalahnya kadang memberikan token refresh dan kadang tidak. - person Md. Alim Ul Karim; 24.05.2016
comment
Untuk mempersempit masalah ini, dapatkah Anda mencoba cara permintaan HTTP daripada menggunakan Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory. Pertama, pastikan aliran token penyegaran akan berfungsi di sisi Anda. Setelah itu, kita bisa mendiskusikan mengapa refresh_token terkadang tidak kembali di sesi baru. - person Jeffrey Chen; 24.05.2016
comment
Bisakah Anda mengarahkan saya ke url untuk menggunakan aliran http itu. Saya memiliki kode saya di sini: github.com/aukgit/Google-Outlook-Calender-Integrate/blob/master/ - person Md. Alim Ul Karim; 24.05.2016