-
Notifications
You must be signed in to change notification settings - Fork 0
MS_AppAuth
-
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 の中心的な主張である。
以下のような処理を実装できる。
-
認証・認可を要求する
- 認証・認可に使用するサーバーの情報を取得する。
- アプリ内ブラウザタブを使って認証・認可のリクエストを行なう。
-
認証・認可の結果を受け取る
-
カスタム 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 Android」と同じ。
-
以下フレームワークを使用するアプリケーションで
使用するように設計されているらしい。- Web アプリ
- Node.js CLI アプリケーション
- Chrome アプリ
- Electron など
-
Native App と Browser App の双方をサポート
Browser App(SPA)向けの場合、ベストプラクティスが異なる。- Refresh Token をフロントチャネルで返さない。
- Access Token の永続化場所が、Web Storage などになる。
id_token の署名検証に必要になる。
-
AppAuth for Android、
AppAuth for iOS and macOSには、JWK 処理が追加されている。 - ただし、AppAuth for JSに、JWK 処理は発見できなかった。
(JWKを参照)
AppAuth のメリットは、
-
OAuth / OIDC に準拠している。
-
IdP 各社が提供する SDK は、OAuth / OIDC に準拠していない。
-
確かに SQL も些細な方言を混ぜて
クロスプラットフォームを困難にしている。
-
ベストプラクティスに準拠しているので、
自身のコードの信頼性を主張するのに苦労しなくて済みそう。 -
特に、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 でサーバ側に置く方向に整理されている。
-
OpenID
https://github.com/openid -
AppAuth
https://appauth.io/ -
Kotlin と AppAuth for Android でネイティブアプリの実装サンプルを作ってみた — 実験メモとかいろいろ
https://paonejp.github.io/2017/11/04/making_kotlin_appauth_android_demo_application.html
https://github.com/openid/AppAuth-Android
https://github.com/openid/AppAuth-Android/tree/master/app
https://github.com/openid/AppAuth-iOS
https://github.com/openid/AppAuth-iOS/tree/master/Examples
https://github.com/openid/AppAuth-JS
- https://github.com/openid/AppAuth-JS/tree/master/app
- https://github.com/googlesamples/appauth-js-electron-sample/
Tags: IT国際標準, 認証基盤, クレームベース認証, OAuth
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。