0

現在、OAuth in out エコシステムの設計に取り組んでいます。もちろん、モバイルアプリがユーザー認証情報グラントタイプを使用して OAuth サーバーで認証し、さらなるワークフローのトークンを取得するという考えです。一方、保護されたリソース サーバーは、同じ OAuth サーバーでトークン情報を検証し、それに応じて応答します。

すべて明らかですが、懸念事項が 1 つあります。それが機能するようになりました。コードにコンパイルされたクライアント シークレットを使用してアプリを配信する必要があります。これにより、大きなセキュリティ ホールが開かれます。それを回避する方法はありますか、それとも問題ですか?

ありがとう、

4

1 に答える 1

1

RFC 6749、4.3.2 より。アクセストークンリクエスト:

The authorization server MUST:

   o  require client authentication for confidential clients or for any
      client that was issued client credentials (or with other
      authentication requirements),

そのため、クライアント アプリケーションのクライアント タイプ (RFC 6749, 2.1. Client Types ) が公開されている (そしてクライアントにクライアント シークレットが発行されていない) 場合、トークン要求にクライアント シークレットを含める必要はありません。つまり、認可サーバーにクライアントシークレットを提示することなく、アクセストークンを取得できます。この場合、クライアント シークレットをクライアント アプリケーションに埋め込むことを避けることができます。

一方、クライアント アプリケーションのクライアント タイプが機密である場合、クライアント アプリケーションはスマートフォンに配信されるべきではありません。

クライアント タイプをパブリックまたはコンフィデンシャルに設定する方法は、使用している認可サーバーの実装によって異なります。一部の実装では、公開または機密を選択するための明示的なトグル ボタンが用意されています。他のアプリケーションはそのような明示的なオプションを提供せず、クライアント アプリケーションのクライアント タイプは暗黙的に決定されます。たとえば、認可サーバーが提供する構成ページで Android アプリケーションを選択すると、クライアント タイプがパブリックになります。

ただし、一部の認可サーバーの実装では、クライアントの種類がパブリックか機密かに関係なく、常にクライアント シークレットが必要になる場合があることに注意してください。

于 2015-11-13T04:08:08.663 に答える