「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>UserAgentでOAuth2のTokenを取得するベスト・プラクティス]]
--AppAuth
--[[OAuth 2.0 for Native Apps]]
--[[OAuth 2.0 for Browser-Based Apps]]

* 目次 [#td3471e2]
#contents

*概要 [#f27dbf87]
-[[OAuth]]2, [[OIDC>OpenID Connect]]の下記ベストプラクティスの採用を助ける
--[[OAuth 2.0 for Native Apps]]
--[[OAuth 2.0 for Browser-Based Apps]]

-OpenID Foundationが後援する各Native App環境をサポートするSDK。
--iOS, macOS
--Android
--Native JS

-Native AppへのWebView埋め込みを遠ざけ、代わりに以下の使用を主張する
--外部エージェント(システムブラウザ)
--アプリ内ブラウザタブ(SFAuthenticationSessionやカスタムタブ)

-[[OAuth]]2, [[OIDC>OpenID Connect]]仕様を超えた[[OAuth PKCE]]等の仕様を推進。

*詳細 [#afc5a6c3]

**基本的な処理 [#t73d4289]
以下のような処理を実装できる。

*** AppAuth for Android [#t715adb5]
-認証・認可を要求する
--認証・認可に使用するサーバーの情報を取得する。
--アプリ内ブラウザタブを使って認証・認可のリクエストを行なう。

-認証・認可の結果を受け取る
--カスタム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)。

***AppAuth for iOS and macOS [#w24da2f4]
恐らく「[[AppAuth for Android>#t715adb5]]」と同じ。

***AppAuth for JS [#r9c27cce]
-以下フレームワークを使用するアプリケーションで~
使用するように設計されているらしい。
--Webアプリ
--Node.js CLIアプリケーション
--Chromeアプリ
--Electronなど

-Native AppとBrowser Appの双方をサポート~
Browser App(SPA)向けの場合、ベストプラクティスが異なる。
--Refresh Tokenをフロントチャネルで返さない。
--Access Tokenの永続化場所が、Web Storageなどになる。

**OIDC対応 [#o806e409]

***JWK処理 [#nb15fc42]
id_tokenの署名検証に必要になる。

-[[AppAuth for Android>#t715adb5]]、[[AppAuth for iOS and macOS>#w24da2f4]]には、JWK処理が追加されている。
-ただし、[[AppAuth for JS>#r9c27cce]]に、JWK処理は発見できなかった。

**メリット [#g8cd7f5a]
AppAuthのメリットは、

***仕様への準拠 [#p7c2a63f]
-OAuth / OIDCに準拠している。

-IdP各社が提供するSDKは、OAuth / OIDCに準拠していない。
--https://twitter.com/nov/status/1151472283048800258
--https://twitter.com/nov/status/1151472752756264967

-確かにSQLも些細な方言を混ぜて~
クロスプラットフォームを困難にしている。

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

-特に、AppAuth-JSは、
--Hybrid(Native App)
--SPA(Browser App)

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

*参考 [#l8383f3b]
-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

**AppAuth for Android [#j088ca6a]
https://github.com/openid/AppAuth-Android

***Demo App [#q3c1ff76]
https://github.com/openid/AppAuth-Android/tree/master/app

**AppAuth for iOS and macOS [#y3fbbd12]
https://github.com/openid/AppAuth-iOS

***Examples [#ba476c64]
https://github.com/openid/AppAuth-iOS/tree/master/Examples

**AppAuth for JS [#t2d2f139]
https://github.com/openid/AppAuth-JS

***Demo App [#f0c9176a]
-https://github.com/openid/AppAuth-JS/tree/master/app
-https://github.com/googlesamples/appauth-js-electron-sample/

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS