내 WPF 데스크톱 응용 프로그램 (C#)이 Microsoft Graph API를 통해 사용자의 Outlook 전자 메일을 읽으려고합니다. 나는 인증 과정에 갇혀있다. 이미 인증 코드를받은 지금은 푸른에서 액세스 토큰을 얻을 수 있지만, 액세스 토큰에 대한 요청 밖으로 보낼 때 HTTP 400 오류 코드가 계속하려고 해요 : 위의Azure AD OAuth2 액세스 토큰 요청 오류 - 400 잘못된 요청
/**** 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
}
을 액세스 코드를 검색하려고 시도한 인증 코드를 검색하는 데 사용되는 코드입니다. 비밀은 웹 응용 프로그램에만 해당되며 기본 데스크탑 WPF 응용 프로그램이므로 client_secret이 없습니다. 나는 이것이 문제가 아니라는 것을 읽었습니다. 나는 대부분 the official Graph authorization doc과 많은 튜토리얼과 공식 문서를 온라인으로 따라 왔으며 아직도 내가 잘못하고있는 것을 파악할 수 없다. 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.
전체 400 오류 메시지를 제공 할 수 있습니까 (또는 Robert가 말한 것처럼 완전히 피들러 추적). 또한 앱이 웹 앱이 아닌 기본 클라이언트 (또는 공개 클라이언트)로 등록되어 있는지 확인하십시오. 네이티브/공용 클라이언트가 액세스 토큰에 대한 코드를 사용하도록 암호를 요구하지 않습니다. –
답장을 보내 주셔서 감사합니다. Fiddler는 400 오류 문제를 해결하는 데 도움을주었습니다. 인증 코드가 만료 되었음이 드러났습니다. 지금은 액세스 토큰 응답이 json 객체 (예 : 예상 한 것처럼)가 아니라 html 문서 인 새로운 문제에 직면하고 있습니다. 다음은 피들러 추적입니다. https://drive.google.com/file/d/0B9w2-YCX6qYvZmxXdERjWDJsamM/view?usp=sharing – Midas
해당 호출이/authorize 끝점에 대한 POST 인 것 같습니다. 인증 코드를 액세스 토큰으로 변경하려면/토큰 엔드 포인트에 POST를 수행해야합니다. –