🫡

Flutter❌Microsoft Entraにてandroid アプリからアクセストークンを取得する

2024/05/26に公開

概要

Flutter❌Microsoft EntraにてOAuthのフローに則りアクセストークンを取得する実装方法

記事のモチベーション

自分の頭の整理と、Azure系全般的に記事少なめなので同じような事をしようとしている誰かのお役に立てれば。

バージョン情報・利用ライブラリ

flutter: 3.22.1
flutter_appauth: ^6.0.6

1.アプリの登録

以下に則りアプリをEntra上に登録する
https://learn.microsoft.com/ja-jp/entra/identity-platform/quickstart-register-app

2.実装

大きく2箇所実装する必要がある。

1.android/app/build.gradle

android/app/build.gradle

manifestPlaceholders += [appAuthRedirectScheme: "msauth"]

2.Flutter内の処理

final AuthorizationTokenResponse? result = await appAuth.authorizeAndExchangeCode(
  AuthorizationTokenRequest(
    'CLIENT_ID',
    'REDIRECT_URL',
    discoveryUrl: 'DISCOVERY_URL',
    scopes: SCOPES,
  ),

各設定項目に関して

意味については現時点での自分の理解ですが、自分自身あまり詳しくないためより詳しくは別記事を参照することをお勧めします。

CLIENT_ID


Azureの登録したアプリの概要画面に記載のCLIENT_IDを利用

CLIENT_IDとは

認可サーバにアクセスするためのクライアントアプリケーションを一意に識別するためのID。
今回だとクライアントアプリケーション = Azureに登録したアプリ。

REDIRECT_URL


Azureの登録したアプリの認証タブ内に記載のREDIRECT_URLを利用

REDIRECT_URLとは

認可サーバが認証情報を返却する先。

DISCOVERY_URL


登録したアプリに記載のエンドポイントを利用

DISCOVERY_URLとは

クライアントアプリケーションが認可サーバの仕様を把握するための情報が提供されているURL。
今回だとクライアントアプリケーション = Azureに登録したアプリ、認可サーバ = Azure。

SCOPES

数種類存在するが、oidc用のスコープなども存在する。ユーザーのプロファイル情報が必要なければopenidで良い。(はず。まだ未確認。)
https://learn.microsoft.com/en-us/graph/permissions-reference#openid

SCOPESとは

認可サーバがどこまでの情報をクライアントアプリケーションに渡すか定めたもの
今回だとクライアントアプリケーション = Azureに登録したアプリ、認可サーバ = Azure。

Discussion