私のWPFデスクトップアプリケーション(C#)がMicrosoft Graph APIを通じてユーザーのOutlook電子メールを読み取ろうとしています。私は認証プロセスに悩まされています。 Iすでに認証コードを受け取ったと今、私はアズールからアクセストークンを取得しようとしているが、トークンアクセスの要求送信するとき、HTTP 400エラーコードを取得しておいてください。Azure AD OAuth2アクセストークン要求エラー - 400 Bad Request
/**** Auth Code Retrieval ****/
string authCodeUrl = "https://login.microsoftonline.com/common/oauth2/authorize";
authCodeUrl += "?client_id" = clientId;
authCodeUrl += "&redirect_uri=" + redirectUri;
authCodeUrl += "&response_type=code";
authCodeUrl += "&resource=https%3A%2F%2Fgraph.microsoft.com%2F";
Process.start(authUrl); // User logs in, we get the auth code after login
string code = "......"; // Hidden for this post
/**** Access Token Retrieval ****/
string tokenUrl = "https://login.microsoftonline.com/common/oauth2/token"
string content = "grant_type=authorization_code";
content += "&client_id=" + clientId;
content += "&resource=https%3A%2F%2Fgraph.microsoft.com%2F";
content += "&code=" + code;
content += "&redirect_uri=" + redirectUri;
WebRequest request = WebRequest.Create(tokenUrl);
request.ContentType = "application/x-www-form-urlencoded";
byte[] data = Encoding.UTF8.GetBytes(content);
request.ContentLength = data.Length;
request.Method = "POST";
try
{
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
WebResponse response = request.GetResponse(); // This throws exception
}
catch (Exception error) // This catches the exception
{
Console.WriteLine(error.Message); // Outputs 400, bad request
}
上記のアクセスコードを取得しようとする認証コードを取得するために使用されるコードです。シークレットはWebアプリケーションのみのため、これはネイティブデスクトップWPFアプリケーションであるため、client_secretはありません。私はこれが問題ではないことを読んだ。私は多くのチュートリアルと公式の文書をオンラインで、主にthe official Graph authorization docに従ってきましたが、私はまだ間違っていることを理解できません。どんな助けでも大歓迎です、ありがとうございます。
返信いただいた400のエラーメッセージを提供することができますか(ロバート氏が言うように、完全なフィドラートレース)。また、あなたのアプリがWebアプリケーションではなく、ネイティブクライアント(またはパブリッククライアント)として登録されていることを確認していますか?ネイティブ/パブリッククライアントは、アクセストークンのコードを償還するための秘密を必要としません。 –
お返事ありがとうございます!フィドラーは私が400エラーの問題を解決するのを助けました - それは私の認証コードが期限切れになったことが判明しました。私は現在、アクセストークンの応答がアクセストークンを含むjsonオブジェクトではない(期待どおりの)新しい問題に直面していますが、htmlドキュメントです。フィドラートレースは次のとおりです。https://drive.google.com/file/d/0B9w2-YCX6qYvZmxXdERjWDJsamM/view?usp=sharing – Midas
その呼び出しは/ authorizeエンドポイントのPOSTのようです。認証コードをアクセストークンに変更するには、/トークンエンドポイントにPOSTを実行する必要があります。 –