web-dev-qa-db-ja.com

Oauth2の仕組み(Androidクライアント)

私はOauth2について多くを読みましたが、それでも理解できません。このプロトコルを理解する方法を説明します。

Oauthプロトコルインタラクションにはいくつかのメインキャラクターがあります。
ユーザー、アプリケーション、リソースプロバイダー、認証サーバー。
メインフローを理解するにはどうすればよいですか。
モバイルクライアントを作成しているので、例として使用します。

最初にユーザーはアプリをインストールします。最初にユーザーがこのアプリを実行して保護されたリソースにアクセスするときよりも、ユーザーはパスワードを入力して、リソースサーバーの認証情報ではなく認証サーバーに直接ログインする必要があります。たとえば、私はオンラインストアアプリを持っています。ユーザーはFacebookアカウントを介してログインすることを許可されているため、ユーザーがサイトからリソースにアクセスする必要がある場合、最初のステップはFacebookアカウントで承認します。ログインとパスワードを入力し、認証情報が正しい場合は、Facebookサーバーがユーザーまたはアプリにアクセストークンを提供します。

アクセストークンを取得したら、それをデバイスの安全な場所またはローカルデータベースに保存します(Androidの場合はSQLiteです)。
正常にサインインすると、Oauthサーバーはリソースプロバイダーサーバー(私のオンラインストア)のウィットトークンにリダイレクトし、リソースサーバーはこのトークンをユーザーID /と共にデータベースに保存しますログイン名です。これで、リソースサーバーは、そのようなIDを持つユーザーがこのトークンで保護されたリソースにアクセスできることを認識しました。

クライアント側(Androidアプリ)でこのトークンを取得すると、有効期限が切れます。安全なリソースにアクセスする必要がある場合は、このトークンをPOST/PUTまたはHTTPSプロトコル経由のリクエストで渡します。これは、別の人がこのトークンを取得した場合、それを使用してプライベートにアクセスし、変更を加えることができるためです。

たとえば、注文する必要がある場合、モバイルクライアントからRESTトークンを添付したリクエストを行うと、リソースサーバーはこのトークンをチェックし、データベースと同じである場合、アクセスを許可されます。保護されたリソースを変更します。

Oauthプロトコルが正しくわかりませんか?

今私の質問

  1. ネイティブクライアントがあり、ユーザーがソーシャルネットワークアカウントやネットワーク内の他のOauth2サーバーを使用してログインできない場合、Webページでのログインのみを許可しますか?パスワードとログイン。この場合、Oauth2はこの場合適用できませんか?はいの場合、次の質問。

  2. 代わりに何を使うべきですか?資格情報をリソースサーバーに1回だけ送信する必要があります。資格情報をチェックし、問題がなければトークンを生成し、トークンをデータベースに入れて、アプリに成功の応答を返します。たとえば、POSTメソッドを使用してhttps接続を介してパスワードを送信し、初めてログインします。リソースサーバーは、Oauth flowと同じトークンを発行します。

  3. 発行されたトークンをどのように保護できますか?しばらくしてからユーザーにログイン名とパスワードを再入力させますか?

これを手に入れるのを手伝ってください。どんな助けにも感謝します。

4
cvuibpsb

あなたの質問に:

  1. [...]ソーシャルネットワークアカウントやネットワーク内の他のOauth2サーバーを使用してログインする機能がありません[...]。

your所有者OAuth承認サーバーが必要ですyourリソースサーバーを管理します。OAuth Google、Facebook、Twitterなどのサーバーは役に立ちません。私の知る限り、メール、写真、投稿などの独自のリソースへのアクセスのみを許可できるためです。

例は次のとおりです。

  • サービスの写真が必要です。
  • 他のサイトが使用している1つが必要です。
  • 画像の所有者(通常はユーザー)によって承認されます。
  • トークンを使用すると、画像にアクセスできます。

あなたはプロトコルの流れを理解していると思いますが、おそらくAuthentication(verify ones identity)とAuthorization(grant access to resources)を混同していると思います。

OAuth v2.0はauthorizationプロトコルであり、リソースへのアクセスを管理します。他のサービス(これはアプリである可能性があります)がリソースサーバーデータにアクセスできるようにします。

1
tintin