こんにちは。Tomoyuki(@tomoyuki65)です。
SSO(Single Sign On)のサービスやら実装に関して色々調べていて、コストの観点も考慮すると「Azure AD B2Cというサービがありなのでは?」と思ったので、軽く試してみることにしました。
ただ結論から言うと私がやりたい実装方法を実現するのが厳しそうなのがわかったので、今後は別のサービスを使うことになりそうですが、情報収集していて自分が欲しい情報がほぼ落ちてない感じだったので、今回は私が試した部分に関して少し情報を残しておきます!
今回私が期待していたこととしては、Firebase Authenticationのようにバックエンド側からもユーザー認証などができるとよかった(ログイン関連機能はバックエンド側に寄せる想定)のですが、Laravel(PHP)ではそれが実現可能なライブラリも無いみたいなので、簡単にはできないという結論に至りました。
Azure AD B2CでのSSOおよびログイン関連機能をフロント側に寄せるなら簡単に実装できるので、そういう用途で使いたい方は一度試してみて下さい。
目次
Azure AD B2Cを使ってみた!PostmanやLaravelでMicrosoft Graph APIの実行方法もご紹介
Azureのアカウント登録
まずはAzureのアカウント登録から解説します。
Azureの公式サイトにアクセスし、「Azureを無料で試す」をクリックします。
次に「無料で始める」をクリックします。
次にMicrosoftのアカウントを新規作成するか、既にアカウントをお持ちの方はサインインをして下さい。
Microsoftアカウントにサインイン後、プロフィールを入力します。
各種入力して規約に同意後、「次へ」をクリックします。
次にクレジットカードの登録を行います。
※図に記載の通り、継続契約の手続きをしない限り自動請求はされません。
クレジットカード情報入力後、「サインアップ」をクリックします。
アカウント保護の画面がでたら「次へ」をクリックします。
パスワードを入力し、「サインイン」をクリックします。
「〜にメールを送信」をクリックします。
対象のメールアドレスを入力し、「コードの送信」をクリックします。
次にメールに届いたコードを入力し、「確認」をクリックします。
これでAzureのアカウント作成が完了したので、「Azure portalに移動する」をクリックします。
次にクイックスタート画面が表示されますが、確認不要なら右上の「×」をクリックして閉じます。
これでAzureのTOP画面が表示されてアカウント作成までが完了です。
Azure AD B2Cのテナント作成
次にAzure AD B2Cを試すため、まずはテナントという箱みたいなのを作ります。
TOP画面から「リソースの作成」をクリックします。
次に画面左のメニューから「ID」をクリック後、Azure Active Directory B2Cの「作成」をクリックします。
次に「新しいAzure AD B2Cテナントを作成する」をクリックします。
次に組織名、初期ドメイン名を入力後、場所を選択します。
次に画面下にあるリソースグループの「新規作成」をクリックします。
次にリソースグループの場所を選択し、「次:確認および作成」をクリックします。
検証に成功後、画面左下の「作成」をクリックします。
テナントの作成処理が完了後、「テナントが正常に作成されました。新しいテナント〜に移動するには、ここをクリックします。」をクリックします。
これでテナントの作成までが完了です。
作成したテナントにアプリを登録
次に上記で作成したテナントに対してアプリを登録するため、画面左のメニュー「アプリの登録」をクリック後、画面上の「+新規登録」をクリックします。
次にアプリケーションの名前を入力します。
次に今回はそれ以外の設定はデフォルトのままで、画面下の「登録」をクリックします。
これでアプリの登録が完了です。表示されているアプリケーション(クライアント)IDは後で接続情報として使うのでメモしておいて下さい。
作成したアプリにユーザー管理者のロールを付与
次に上記で作成したアプリがユーザーのパスワード変更等もできるようにするため、ロールを付与します。
ロールを付与するには、一度テナントの画面に戻り、画面左のメニュー「ロールと管理者」をクリック後、一覧にある「ユーザー管理者」をクリックします。
次に画面上の「+割り当ての追加」をクリックします。
次に検索バーに上記で作成したアプリ名を入力して検索し、対象のアプリにチェックを付けた後、画面下の「追加」をクリックします。
これでアプリに対してユーザー管理者のロール付与が完了です。
シークレットキー(秘密鍵)の作成
次に外部からアプリに接続できるようにするため、シークレットキー(秘密鍵)の作成を行います。
アプリの詳細画面を開いた後、画面左のメニュー「証明書とシークレット」クリックし、クライアントシークレットにある「+新しいクライアントシークレット」をクリックします。
次にシークレットキーの名前と有効期限を設定し、画面下の「追加」をクリックします。
※有効期限について、現在はセキュリティの観点から最大2年間までしか設定できないようです。長期運営のサービスで使う場合は定期的に更新が必要になるので、その点はご注意下さい。
次にシークレットキー登録後、値の部分にキーが表示されるので、これをメモしておきます。
※画面更新するとマスクされて見れなくなるので、画面更新前にメモして下さい。
Microsoft Graph APIで使うエンドポイント確認
ここまででMicrosoft Graph APIを実行させるための準備が整ったので、APIの実行で使うエンドポイントを確認しておきます。
ではもう一度テナントの詳細画面からアプリの登録の画面を開き、画面上の「エンドポイント」をクリックします。
これでエンドポイント一覧が表示されるので、「Microsoft Entra ID OAuth 2.0 トークン エンドポイント (v2)」と「Microsoft Graph API エンドポイント」をメモしておきます。
PostmanでMicrosoft Graph APIを試す
次にMicrosoft Graph APIの実行を試すのでPostman(APIを簡単に実行できるサービス)を使いますが、ここではPostmanの詳しい説明は割愛させていただきます。
Microsoft Graph APIでデータ操作をするためには、まず事前にエンドポイント「Microsoft Entra ID OAuth 2.0 トークン エンドポイント (v2)」を使ってアクセストークンを取得する必要があります。
Postmanで新しいリクエストを作成し、メソッドは「POST」、Bodyにはタイプ「x-www-form-urlencoded」で、Key-Valueには「grant_type」に「client_credentials」、「client_id」にメモしておいたクライアントID、「client_secret」にメモしておいたシークレットキー、「scope」に「https://graph.microsoft.com/.default」をそれぞれ設定し、画面右上の「Send」をクリックしてAPIを実行します。
成功するとaccess_tokenが取得できるので、値の部分をメモしておきます。
※アクセストークンには有効期限があるため、期限が切れたらまた再取得して下さい。
次にまた新しいリクエストを作成し、テナントにユーザーを新規作成するエンドポイント「https://graph.microsoft.com/v1.0/users」を試してみます。
メソッドは「POST」、タブ「Authorization」で「Bearer Token」を選び、上記でメモしたアクセストークンの値を設定します。
次にタブ「Headers」でKeyに「Content-Type」、Valueに「application/json」を設定します。
次にタブ「Body」でタイプに「raw」を選択後、入力フィールドには以下のようなサンプルコードを入力します。
基本項目としては、表示名(displayName)、姓(surname)、名(givenName)、メールアドレス(mail)、ユーザー名(identitiesのissuerAssignedId)、パスワード(passwordProfileのpassword)になります。
※identitiesのissuerには「テナント名.onmicrosoft.com」を設定して下さい。またpasswordPoliciesの「DisablePasswordExpiration」はパスワードの期限を無効化する設定で、passwordProfileのforceChangePasswordNextSignInは次回のログイン時にパスワードを強制変更させるためのフラグです。
{
"displayName": "テスト 太郎",
"surname": "テスト",
"givenName": "太郎",
"mail": "test-taro1@example.com",
"identities": [
{
"signInType": "emailAddress",
"issuer": "[テナント名].onmicrosoft.com",
"issuerAssignedId": "test-taro1@example.com"
}
],
"passwordProfile" : {
"password": "password-123",
"forceChangePasswordNextSignIn": false
},
"passwordPolicies": "DisablePasswordExpiration"
}
各種設定後に画面右上の「Send」をクリックし、APIが正常終了すればOKです。
APIの実行結果を確認するため、テナントの詳細画面のメニュー「ユーザー」をクリックします。
ユーザー画面が開き、想定通りのユーザーが作成されていればOKです。
こんな感じでMicrosoft Graph APIを使って色々操作可能ですが、APIからユーザー認証みたいなことはできないっぽい?のでご注意下さい。
LaravelでMicrosoft Graph APIを実行したい場合について
次にLaravel(PHP)からMicrosoft Graph APIを実行したい場合について解説しておきます。
Laravel用のライブラリとして「microsoft/microsoft-graph」があるので、以下のコマンドでインストールできます。
composer require microsoft/microsoft-graph
そして、コントローラーなどで以下のようなサンプルコードを書けば、APIを実行して色々と操作可能です。
// インポート
use Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext;
use Microsoft\Graph\Core\Authentication\GraphPhpLeagueAccessTokenProvider;
use Microsoft\Graph\Core\GraphConstants;
use Microsoft\Graph\Core\GraphClientFactory;
class SampleController extends Controller
{
// ファンクション
public function graphapi(Request $request)
{
// 接続情報(わかりやすいようにハードコーディング)
$tenantId = "テナントIDを設定";
$clientId = "クライアントIDを設定";
$clientSecret = "シークレットキーを設定";
// アクセストークンの取得
$tokenRequestContext = new ClientCredentialContext(
$tenantId,
$clientId,
$clientSecret
);
$tokenProvider = new GraphPhpLeagueAccessTokenProvider($tokenRequestContext);
$accessToken = $tokenProvider->getAuthorizationTokenAsync(GraphConstants::REST_ENDPOINT)->wait();
$config = [
'headers' => [
'Authorization' => 'Bearer ' . $accessToken
]
];
// APIの実行
$httpClient = GraphClientFactory::createWithConfig($config);
$response = $httpClient->get("/v1.0/users");
$data = json_decode($response->getBody());
// レスポンス設定
return response()->json($data);
}
}
最後に
今回はAzure AD B2Cについてご紹介しました。
私が調べた限りだと、バックエンド側からログイン関連機能におけるユーザー認証みたいなことはできなそうな感じだったので、その点はちょっと残念でした。(もっと詳しく探せばあるのか??)
ただそれ以外はMicrosoft Graph APIで色々できるみたいなので、PostmanやLaravelでAPIの実行を試したい方がいたら、ぜひ参考にしてみて下さい。
各種SNSなど、チャンネル登録やフォローをしていただけると励みになるので、よければぜひお願いします!
Tomoyuki
最新記事 by Tomoyuki (全て見る)
- 【スト6】モダンキャミィの初心者向けコンボまとめ【STREET FIGHTER 6(ストリートファイター6)】 - 2024年11月10日
- モンハンワイルズでおすすめのオプション設定まとめ【Monster Hunter Wilds】 - 2024年11月4日
- モンハンワイルズでおすすめのグラフィック設定まとめ【Monster Hunter Wilds】 - 2024年11月2日
コメントを残す