1

私はファーストパーティのモバイルアプリとシングルページのウェブアプリの両方を持つプロジェクトを行っています。私はOAuth 2を認証に使用したいと思っていますが、これらのパブリックファーストパーティクライアントがクライアント資格情報を保護できないことを考慮して、この許可タイプを使用することをお勧めします。OAuth 2ファーストパーティのモバイルアプリとシングルページアプリのパスワード

理想的には私は認可コードグラントタイプの認証のために別のWebページへの外部ブラウザやWebアプリケーションのユーザーにモバイルユーザーをプッシュする必要はありません。

これらのクライアントタイプでパスワード許可タイプの作業を行うことはできますか、またはファーストパーティアプリケーションのOAuthの代替方法を検討する必要がありますか?

答えて

0

一般的に、データの安全性を確保する方法があるため、モバイルアプリではこれが簡単になります。たとえば、IOSの場合、秘密を保存できるキーチェーンがあります。モバイルアプリは、コードのどこかに置いておかない限り、クライアントの秘密を安全に保つことが大切です。

ただし、SPAに関する限り、何かを安全に保つ方法を見つけることは非常に疑問です。私は何度もやった

はのOAuth2の複雑さに対処し、そこClientSecretを保った非常にシンプルなAPIを構築することでした。 SPAはこのAPIを呼び出し、このAPIは要求をOAuth2保護された実際のAPIに渡し、応答をSPAに返信します。基本的に1つの余分なレイヤーが中間にあります。

明らかに、このレイヤーを追加すると、フロントエンドアプリケーションに別のレイヤーの保護が必要になることも明らかです。ユーザー管理があり、ユーザーが何かにアクセスする前にログインすることを期待している場合は、これが実行されます。もちろん、あなたのユーザー管理とOAuth2コンポーネントには違いがあります。 OAuth2は、認証されたアプリケーションだけがそのデータにアクセスできることを保証し、ユーザーが認証されるとすべてが良好であることを確かめることができます。

これがすべてでClientSecretを露出させずに不正誰ものOAuth2 APIをヒットしていないことを確認することの世話をします。 「信頼できる」アプリケーションについては

+0

これは基本的に問題をシフトしていませんか?クライアントシークレットを提供する理由は、信頼できるクライアントだけがユーザー名/パスワードを処理できるようにするためです。プロキシをお持ちの場合、信頼されていないクライアントはプロキシにユーザー名/パスワードを投稿するだけでクライアント秘密の有用性を否定できます。 – user1569339

+0

このようなapisは認証されたユーザーに限定してアクセスすることは珍しいことではありません。あなたは、ユーザーがAPIにアクセスできる必要があることを知っています。 OAuth2保護されたAPIへの認証されていないアクセスを許可することを提案していません。私はフロントエンドにあなたのクライアントの秘密を公開してはならないと言っています –

+0

私はあなたが誤解していると思います。私は、認証要求を出しているクライアントの検証について話しています。クライアントのシークレットがパスワード許可に推奨されるのは、信頼できるクライアントだけがそのクライアントを使用できるようにするためです。これにより、サードパーティのクライアントがパスワードを要求して代理人に送信し、認証コードなどのOAuthの許可を迂回することを回避できるケースが最小限に抑えられます。クライアントの秘密を必要としないプロキシがある場合、信頼されていない第三者のクライアントがユーザーのパスワードを使用してアクセストークンを取得することを阻止するものはありません。 – user1569339

1

、すなわちあなたが「ファーストパーティ」アプリケーションを言うように、それは、モバイルアプリケーションのためのリソース所有者のパスワードのグラントで行くことに通常大丈夫です。アクセストークンとリフレッシュトークンのユーザー名とパスワードを交換し、モバイルアプリケーションにできるだけ安全に保存します。終了後、エンドユーザーのユーザー名とパスワードをメモリから消去することを忘れないでください。

シングルページアプリケーションの場合、フローへの移行は暗黙的なグラントで、フラグメント(#access_token=...)のリダイレクトを経由してアクセストークンを受け取るので、そこからSPAが取得できます。この場合、SPAはそれ自身のスコープ内でユーザ名とパスワードを決して使用することはありません。これらは、認可サーバーおよび/またはIDプロバイダのログイン・インタフェースにのみ公開されます(実装に応じて)。

SPAの場合、最初の認証と認可のために認可サーバーへの最初のリダイレクトがまだあります。アクセストークンをリフレッシュする必要がある場合は、OIDC仕様を調べることができます。この場合、追加の&prompt=noneが追加され、暗黙的な認可によって新しいアクセストークンを取得できるようになります。 a iframeです。最後に、この方法は、エンドユーザのユーザエージェント(=ブラウザ)とのセッションを持つ認証サーバに依存しますが、ではなく、でSPAの起点となります。

関連する問題