Skip to content

MS_AppAuth

nishi_74322014 edited this page Sep 1, 2026 · 1 revision

AppAuth

概要

  • OAuth 2, OIDC の下記ベストプラクティスの採用を助ける

  • OpenID Foundation が後援する各 Native App 環境をサポートする SDK。

    • iOS, macOS
    • Android
    • Native JS
  • Native App への WebView 埋め込みを遠ざけ、代わりに以下の使用を主張する

    • 外部エージェント(システムブラウザ)
    • アプリ内ブラウザタブ(SFAuthenticationSession やカスタムタブ)
  • OAuth 2, OIDC 仕様を超えた OAuth PKCE 等の仕様を推進。

補足(WebView を避ける理由): WebView はアプリのプロセス内にあるため、
ホスト アプリから入力内容や Cookie を覗ける
つまり利用者は「本物の IdP のログイン画面か」を確かめる手段がなく、
シングル サインオンのセッションも共有できない。
システム ブラウザ(またはアプリ内ブラウザ タブ)を使えば、
アドレス バーで接続先を確認でき、SSO セッションも効く。
これが OAuth 2.0 for Native Apps の中心的な主張である。

詳細

基本的な処理

以下のような処理を実装できる。

AppAuth for Android

  • 認証・認可を要求する

    • 認証・認可に使用するサーバーの情報を取得する。
    • アプリ内ブラウザタブを使って認証・認可のリクエストを行なう。
  • 認証・認可の結果を受け取る

    • カスタム URI スキームへのリダイレクトを介して認証・認可結果を受け取る。

    • サーバーから Access Token、Refresh Token を取得する。

    • Access Token、Refresh Token を永続データとして保管する

    • 一度サインインを完了した後はその状態を維持するため、
      Access Token、Refresh Token を永続データとして保管する。

    • Token 漏洩リスクを軽減するため、暗号化を行なうことが望ましい。

  • バックエンド API にアクセスする
    Access Token を Authorization: Bearer ヘッダに付けて API にアクセスする。

  • Access Token を

    • 更新する
      Access Token の有効期限が切れている場合は、
      Refresh Token を使ってサーバーから新しい Access Token を取得する。

    • 無効化する

      • Access Token、Refresh Token をアプリ内から破棄する。
      • この時、サーバー側でも無効化することが望ましい(Revocation)。

Token Revocationを参照)

AppAuth for iOS and macOS

恐らく「AppAuth for Android」と同じ。

AppAuth for JS

  • 以下フレームワークを使用するアプリケーションで
    使用するように設計されているらしい。

    • Web アプリ
    • Node.js CLI アプリケーション
    • Chrome アプリ
    • Electron など
  • Native App と Browser App の双方をサポート
    Browser App(SPA)向けの場合、ベストプラクティスが異なる。

    • Refresh Token をフロントチャネルで返さない。
    • Access Token の永続化場所が、Web Storage などになる。

OIDC対応

JWK処理

id_token の署名検証に必要になる。

JWKを参照)

メリット

AppAuth のメリットは、

仕様への準拠

ベストプラクティスへの準拠

  • ベストプラクティスに準拠しているので、
    自身のコードの信頼性を主張するのに苦労しなくて済みそう。

  • 特に、AppAuth-JS は、

    • Hybrid(Native App)
    • SPA(Browser App)

    の両方のベストプラクティスに対応していそう。

補足(その後の状況): AppAuth 系のライブラリはいずれも
現在も OpenID Foundation の下で公開されているが、
更新の頻度は落ちている(特に AppAuth-JS)。
ブラウザ アプリについては、本文の
「Access Token の永続化場所が Web Storage などになる」という前提自体が
現在は推奨されておらず、
OAuth 2.0 for Browser-Based Apps
補足に書いたとおり BFF でサーバ側に置く方向に整理されている。

参考

AppAuth for Android のリポジトリ

https://github.com/openid/AppAuth-Android

Android の Demo App

https://github.com/openid/AppAuth-Android/tree/master/app

AppAuth for iOS and macOS のリポジトリ

https://github.com/openid/AppAuth-iOS

iOS / macOS の Examples

https://github.com/openid/AppAuth-iOS/tree/master/Examples

AppAuth for JS のリポジトリ

https://github.com/openid/AppAuth-JS

JS の Demo App

本 Wiki 内


Tags: IT国際標準, 認証基盤, クレームベース認証, OAuth

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally