はじめに
Entra IDで認証する時に対話型の認証と非対話型の2種類がありますが、ROPCフローは非対話型認証の方式です。どうしてもこの方式を採用しなければならなかったのですが、実際にやってみてハマったポイントもあるので備忘を兼ねてqiitaに残しておきます。
ROPCフロー図
リクエストを投げるとトークンが返ってくる方式です。簡単でいいですね。
ちなみにドキュメントの抜粋ですが、
とのことなので、セキュリティにリスクがあることは理解したうえで使用した方がよさそうです。
事前準備
③クライアントシークレットの作成
作成後の画面で必ずシークレット値を控える
③クライアントIDをメモした後APIのアクセス許可をクリック
④アクセス許可の追加>Microsoft Graph>委任されたアクセス許可>openidとprofileを選択
⑤[テナント名]に管理者の同意を与えますをクリック
状態に☑が付いたことを確認
リクエスト送信
アプリページからエンドポイント>OAuth2.0トークンエンドポイント(v2)をコピー
client_ID,grant_type,username,password,scope,client_secretをボディに記載し先ほどのエンドポイントにPOSTリクエストを送信
ボディ項目の詳細は以下参照
画像では見切れてますがアクセストークンに加えてIDトークンも同時に取得できています。
個人的ハマりポイント
以下謎にハマって苦戦したところです
①予め[テナント名]に管理者の同意を与えますをクリックしておく必要がある。
同意がないと以下エラーが発生します
ROPCのドキュメントに書いといてほしい
②条件付きアクセスを有効にしているユーザーはトークン取得ができない
ROPCフローの制約として条件付きアクセスが有効になっているユーザーの場合はトークンの取得ができません。こちらはドキュメントに記載がありました。
Entra IDがfreeテナントなので条件付きアクセスが設定できないので画像がないですが、条件付きアクセスが有効なユーザーでトークン取得を行うとAAD50076エラーレスポンスが返ってきます。