Windevの開発から、ユーザーからOutlookメールへのアクセスを取得するための認証にOauth 2.0を使用します。
アプリケーションは https://apps.dev.Microsoft.com で暗黙的なワークフローなしで登録されます。ユーザーが資格情報を入力すると、認証コードが返されます。新しいコードでは、ベアラトークンがHTTP Postコマンドで要求されます。
ここまでは順調ですね。
応答が私には意味のないエラーメッセージを与えることだけ。
コード内:
m_sHTTPUrl = "client_id=" + m_sClientID + "&client_secret=" ...
+ m_sClientSecret ...
+ "&redirect_uri=" + m_sRedirectURL + "&code=" + m_sAuthToken ...
+ "&grant_type=authorization_code"
m_sHTTPres = ""
LogLocalFile("GetAccessToken - " + m_sTokenURL + " // " + m_sHTTPUrl)
cMyRequest is httpRequest
cMyRequest..Method = httpPost
cMyRequest..URL = m_sTokenURL
cMyRequest..ContentType = "application/x-www-form-urlencoded"
cMyRequest..Header["grant_type"] = "authorization_code"
cMyRequest..Header["code"] = m_sAuthToken
cMyRequest..Header["client_id"] = m_sClientID
cMyRequest..Header["client_secret"] = m_sClientSecret
cMyRequest..Header["scope"] = m_sScope
cMyRequest..Header["redirect_uri"] = m_sRedirectURL
//cMyRequest..Content = m_sHTTPUrl
cMyResponse is httpResponse = HTTPSend(cMyRequest)
m_sHTTPres = cMyResponse.Content
ログファイルで、使用したパラメーターとhttpResponseのコンテンツを要求しました。
GetAccessToken - https://login.microsoftonline.com/common/oauth2/v2.0/token // grant_type=authorization_code
&code=xxxxxxx
&scope=openid+offline_access+User.Read+Email+Mail.Read+Contacts.Read
&redirect_uri=http://localhost/
&client_id=xxxxxxx
&client_secret=xxxxxxx
GetAccessToken - error = invalid_request
GetAccessToken - error_description = AADSTS90014: The request body must contain the following parameter: 'grant_type'.
Grant_typeは、ヘッダーにあるはずです。
OAUTH2を機能させるために必要なものの手がかりはありますか?
Paramsでもheadersでもgrant_typeを送信しないでください。これらはbody paramsで送信する必要があり、それだけが機能します。 URL: https://login.microsoftonline.com/common/oauth2/v2.0/token client_id、scopeおよびredirect_uriパラメーターは、クエリパラメーターとして送信できます。ここで、grant_type、codeおよびclient_secretはbody paramsで送信する必要があります。
grant_type:authorization_code、コード:{認証ステップから取得したコード}、client_secret:****
「デフォルトのスコープ」の値をフルネームの例にする必要がある場合、「User.Read」の正しい値はAzure AD APPから取得できます-> APIのアクセス許可