web-dev-qa-db-ja.com

モバイルアプリユーザーを認証するためのOpenID Connect承認フローは何ですか?

RESTful APIと対話するクロスプラットフォームモバイルアプリを構築しています。OpenIDConnectを使用してユーザーを認証したいと考えています。独自のOpenID Connectプロバイダーサーバーを構築します。

OpenID.net クレーム それ:

OpenID Connectを使用すると、ブラウザーベースのJavaScriptやネイティブモバイルアプリを含むすべてのタイプのクライアントがサインインフローを起動し、サインインしたユーザーのIDに関する検証可能なアサーションを受け取ることができます。

ただし、モバイルアプリクライアントの実際の認証方法を説明するドキュメントは見つかりません。

このStackExchangeの回答 は、OpenID Connectが「リソース所有者のパスワードベースの許可」フローまたは「クライアント資格情報」フローをサポートしていないことを明確にします。

これで、「認証コード」フロー(通常はサーバー側アプリで使用)と「暗黙の付与」フロー(通常はクライアント側アプリで使用)が残ります。これらはどちらも、ユーザーをプロバイダーの承認エンドポイントにリダイレクトし、プロバイダーにクライアントURLにリダイレクトさせることに依存しているようです。これがモバイルアプリにどのように適用できるかわかりません。

これを行う方法を説明している誰かが私に説明できますか?

更新

明確にするために:OpenID Connectは、クライアントをユーザーを承認エンドポイントにリダイレクトし、プロバイダーがユーザーをクライアントにリダイレクトすることに依存しています。クライアントがWebアプリではない場合、これはどのように機能しますか?

24
PGleeson

モバイルアプリは、少なくともiOSおよびAndroidでは、カスタムURLスキームを登録できるため、ブラウザーからのリダイレクトにより、いくつかのクエリパラメーターと共にユーザーをアプリに戻すことができます。

したがって、これらのフローをネイティブモバイルアプリで使用できますが、OPで認証するために、ユーザーをWebブラウザー(外部ブラウザーアプリまたはアプリケーションに組み込まれたWebビュー)に送信する必要があります。

ただし、この全体的なアプローチについての私の考えは、独自のOPサーバーと独自のネイティブモバイルアプリを開発しているため、モバイルアプリは本当に信頼できるクライアントであり、ユーザーがユーザー名とパスワードをアプリに直接入力しても問題はないということです。 。 OIDCが解決しようとしている問題ではないため、OpenID Connect仕様でこれがサポートされていない理由をおそらく理解できます。サードパーティのアプリがユーザーにユーザー名とパスワードを直接入力するように要求する可能性があります。ただし、私はあなたと同じようなシナリオに直面していて、どのように進むべきかわからないので、仕様にこの問題に関するより多くのガイダンスがあったことを望みます。

17
James

OpenID Connect仕様のHybridフローはおそらく使用したいものだと思います。 OpenID Connect Core Spec

これは、設定された戻りURIに依存しますが、Jamesが言うように、カスタムURIスキームを使用して、モバイルOSが自分のアプリにログインした後にリダイレクトできるようにします。アプリには、必要に応じてアクセストークンを取得するために使用できるアクセスコードがあります(モバイルアプリが使用するバックエンドAPIサービスを保護するためにOauth2を使用していると想定します)。

悪意のあるアプリがURIスキームをハイジャックしてトークンを取得できる脆弱性があります。それを克服するためのドラフト仕様があります OAuth Public Clientsによるコード交換の証明キー 実装を検討する価値があります。

2
Alex White