具体的には、単一のAPIに対してユーザーを認証するだけの場合、混乱した代理の問題を心配する必要がありますか?
たとえば、基本的なメッセージングサービスでは、認証を行い、ユーザーにメッセージの送信を許可する必要があります。
モバイルアプリケーションを使用して、ユーザーがこのAPIを介してメッセージを送信するための認証および承認の形式としてOAuth2のリソース所有者パスワード資格情報付与を使用することは安全/スマートですか?
Resource Owner Password Credentials Grantに関連する最大のセキュリティ問題は、アプリケーション/クライアントがユーザーのパスワードを知っていることです。
たとえば、アプリケーション/クライアントが会社AwesomeACMEからのものであり、IDプロバイダーがGoogleである場合、AwesomeACMEアプリケーション/クライアントに私のGoogleパスワードを知らせたくはありません。
ただし、AwesomeACMEもIdPである場合、私はそれほど心配することはありませんが、なぜ彼らが代わりに認証コード付与を使用しなかったのか疑問に思います。
パスワード資格情報付与の問題は、資格情報がプレーンテキストで中継されることです。それ自体は問題ではなく、ifバックエンドは閉じられています(サーバーサイド)が、クライアント認証方法の目的に反します。
OAuthを使用してオブジェクト認証を証明できますが、OAuthを使用することはできません。より良い方法は、認証コード付与を使用して、ユーザーをOAuthプロバイダーのログインページにWebビュー経由で送信することです。初めてユーザーがOAuthクライアントを受け入れるか拒否するかを決定できます。その後、クライアント(アプリ)は、ベアラーアクセストークンを使用してAPIと通信できます。 OAuthプロバイダーがアクセストークンを認証オブジェクトに関連付ける場合(これをお勧めします)、APIは常に認証状態をチェックできます。
より高度な認証を行うには、JWTを検討する必要があります。 JWTとOAuthは一緒にNiceをプレイし、両方の利点を活用します。