2017-09-18 7 views
1

トークンをMicrosoft Graph APIで取得します。これは認証ユーザー(マイクロソフト)にトークンservice.Requestを呼び出すためのコードを取得する最初の呼び出しですが、ログインページにリダイレクトできるようにステータスコード302を取得する代わりに送信されます。私はあなたが舞台裏でのOAuthフローを実行することはできません、ステータスコード200Microsoft Graph Api OAuthは、302の代わりにステータスコード200を返します(ログインページにリダイレクトされません)。

public async Task<string> GetBToken() 
{ 
    string url = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?"; //https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize? 
    HttpClientHandler clientHandler = new HttpClientHandler(); 
    clientHandler.UseDefaultCredentials = true; 
    clientHandler.AllowAutoRedirect = true; 

    using(var client = new HttpClient(clientHandler)) 
    { 
     client.BaseAddress = new Uri(url); 
     // We want the response to be JSON. 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); 

     url = url + "grant_type=authorization_code&client_id=" + appId + "resource=https://graph.microsoft.com/ &response_mode=form_post&response_type=code&redirect_uri=http://localhost/5341/Home/AddC &state=12345&scope=" + string.Join(" ", scopes1); 

     var request = new HttpRequestMessage(HttpMethod.Get, url); 
     var result1 = client.SendAsync(request).Result; 

     result1.EnsureSuccessStatusCode(); 

     string jsonString = await result1.Content.ReadAsStringAsync(); // await response.Content.ReadAsStringAsync(); 

     return jsonString; 
    } 
} 

答えて

0

を取得しています、あなたは(つまり、ブラウザでそのURLを開く)を直接https://login.microsoftonline.com/common/oauth2/v2.0/authorize?...にユーザーを送信する必要があります。

プロセスは次のようになります。

  1. は、認証後https://login.microsoftonline.com/common/oauth2/v2.0/authorize?...
  2. にユーザーを送信し、ユーザーが指定したredirect_urlに戻ります。このコールバックには、#3で使用する認証コードを含むクエリパラメータが含まれます。
  3. POST~https://login.microsoftonline.com/common/oauth2/v2.0/token?...を発行してください。これは、Microsoft Graph APIを呼び出すときに使用するアクセストークンを返します。
+1

はい、私のアプローチが正しいとは言えませんでしたが、問題は正しいとは言えませんでした。私はあなたの提案に従います。リンクを許可するseparteリダイレクト要求を作成し、一度コードを受信すると、httpclientからトークン要求を送信するよりも、出来た。どうもありがとう –

関連する問題