話OAuth1、のOAuth2の類似点と相違点

## I、EDITORIAL
データ、クエリを収集し、そして私がが、ほとんどの場合から、良い面と悪い面の両方の記事の多くのOAuth導入を学びました。だから私は一緒に整頓して、stackoverflowの上でいくつかの議論と併せて、公式の文書から始まると思います。二つの部分とのOAuth2に分かれOAuth1.0a仕上げ。

OAuth 1.0aの:片足- >両脚- >三の足
のOAuth 2:両脚- >三本足(附:リフレッシュ・トークン的方式)

両モデルは、左からの矢印によって増分右セキュリティにあり、その実装が比較的複雑になります。前述の記事では比較的まれな中国語の翻訳にはこの足の公式声明(足?)。以下は、OAuthの認証プロセスのこれらの5種類を紹介しました。

##二、OAuth1.0a
2.1のOAuth 1.0A(片足)

  1. 次のパラメータを使用して、署名リクエストを送信するサーバーアプリケーション:
    • 空の文字列をoauth_token
    • oauth_consumer_key
    • oauth_timestamp
    • oauth_nonce
    • oauth_signature
    • oauth_signature_method
    • オプションoauth_version
  2. サービスの検証やリソースへのアクセス権を付与
  3. リソース使用要求の応用

2.2のOAuth 1.0aの(二足)

  1. アプリケーションは、リクエストトークンを取得するために署名したリクエストを送信します。
    • oauth_consumer_key
    • oauth_timestamp
    • oauth_nonce
    • oauth_signature
    • oauth_signature_method
    • オプションoauth_version
  2. サーバーは、リクエストトークンが返されました:
    • oauth_token
    • oauth_token_secret
    • 追加パラメータ/引数
  3. アクセストークンリクエストトークン交換して、署名リクエストを送ります
    • oauth_tokenリクエストトークン
    • oauth_consumer_key
    • oauth_nonce
    • oauth_signature
    • oauth_signature_method
    • oauth_version
  4. アクセストークンサーバとトークンシークレットで返されます
  5. アクセストークンとトークンシークレットによって要求されたリソースのアプリケーションの使用

2.3のOAuth 1.0aの(三本足)

  1. アプリケーションは、リクエストトークンを取得するために署名したリクエストを送信します。
    • oauth_consumer_key
    • oauth_timestamp
    • oauth_nonce
    • oauth_signature
    • oauth_signature_method
    • オプションoauth_version
  2. サーバーは、リクエストトークンが返されました:
    • oauth_token
    • oauth_token_secret
    • oauth_callback_confirmed
    • ...追加パラメータ/引数
  3. 許可されたユーザのURLに送信します
    • oauth_token
  4. 認証用のユーザーにプロンプ​​トを表示
  5. ユーザー認証
  6. 返品承認申請した後、点灯します:
    • oauth_token
    • oauth_verifier
  7. アクセストークンリクエストトークン交換して、署名リクエストを送ります
    • oauth_tokenリクエストトークン
    • oauth_consumer_key
    • oauth_nonce
    • oauth_signature
    • oauth_signature_method
    • oauth_version
    • oauth_verifier
  8. アクセストークンサーバとトークンシークレットで返されます
  9. アクセストークンとトークンシークレットによって要求されたリソースのアプリケーションの使用

## 3、のOAuth2

3.1のOAuth 2(二脚)

3.1.1クライアントの資格情報方法

  1. アプリケーションサーバにリクエストを送信:
    • grant_type = client_credentials
      無許可(許可:基本のBase64(CLIENT_ID場合 :client_secret)) ヘッダのパラメータを添付しなければなりません。
    • クライアントID
    • client_secret
  2. サーバーが応答するアクセストークン
    • アクセストークン
    • expires_in
    • TOKEN_TYPE

3.1.2暗黙的に付与された方法

  1. アプリケーションサーバにリクエストを送信:
    • response_type =トークン
    • これは、プロバイダまたは自分でホストされているサーバー側のリダイレクトURIであるREDIRECT_URI。
    • 範囲
    • オプションの状態
    • クライアントID
  2. 認定に必要。
    • ユーザ名
    • パスワード
  3. サーバはREDIRECT_URIを含むaccess_tokenは含まれて対応させていただきます
  4. REDIRECT_URIへの応用ジャンプ
  5. フラグメントに対応してREDIRECT_URI HTMLやスクリプト。access_tokenはパラメータだけでなく、あなたが必要な場合があります他のパラメータを含むスクリプトやHTML応答フラグメント。

3.1.3リソースの所有者のパスワードモード

  1. リソースの所有者の認証情報へのアプリケーション要求
    • ユーザ名
    • パスワード
  2. 資格情報を持つアプリケーション、サーバはに要求を送信します
    • grant_type =パスワード
    • ユーザ名
    • パスワードの
      URLは次のようになります。grant_type =パスワード&ユーザ名= my_username &パスワード= my_passwordという
      あなたはAuthorizationヘッダーを使用しない場合は、パラメータを添付しなければなりません。
    • クライアントID
    • client_secret
      URL看起来会像是:
      grant_type =パスワード&ユーザ名= my_username&パスワード= my_passwordという&CLIENT_ID = random_string&client_secret = random_secret
  3. サーバー返さアクセス土気
    • アクセストークン
    • expires_in
    • TOKEN_TYPE

3.2のOAuth 2(三本足)

  1. アプリケーションは、認可サービスにユーザーをリダイレクトします。
    • クライアントID
    • REDIRECT_URI
    • response_type
    • オプションの状態; CSRFから保護するための一意の識別子
    • スコープオプション。あなたのアプリケーションがどのデータにアクセスすることができます。
      URL看起来会像是:
      oauth_service /ログイン/ OAuthの/オーソライズのclient_id = 3MVG9lKcPoNINVB&REDIRECT_URI =?のhttp:// localhost /をOAuthの/ code_callback&スコープ=ユーザー
  2. ユーザーは、アプリケーション・サーバーにログオンし、承認を確認します
  3. Serverは、偶発的なパラメータをREDIRECT_URLするようにユーザーをリダイレクトします。
    • コード
    • 状態
  4. コードを取得するためのアプリケーション、およびリターンアクセストークンで
    • クライアントID
    • client_secret
    • コード
    • オプションREDIRECT_URI;
    • grant_type =「authorization_code」
  5. client_idとclient_secretが有効な場合、サーバーはコールバックREDIRECT_URLを呼び出します、access_tokenはが含まれています
    • アクセストークン
    • expires_in
    • refresh_token
  6. 後続の要求で使用されるアプリケーションaccess_tokenはを、保存します。この値は、必要に応じて保存された認証要求として、パラメータまたはセッションやクッキーであるのが典型的です。

3.3 OAuth 2 (Refresh Token 刷新token)

OAuth2では、トークン有効期限は次のようになります、私たちはrefresh_tokenを行かなければならない、新しいトークンを生成するために、先に得られたいくつかの他のパラメータを使用します。これは、はるかに簡単なプロセスです。

  1. リフレッシュトークン要求を作成します。
    • grant_type =「refresh_token」
    • スコープオプション。事前に定義されていない新しいスコープを持つことができません。
    • refresh_token
    • クライアントID
    • client_secret
  2. パラメータ以下のサービスの検証とレスポンス:
    • アクセストークン
    • で発行された

##第四に、stackoverflowの上のいくつかの質問と回答

Q:OpenIDのとOAuthの違いは何ですか?
:OpenIDのは、OAuthの認証(つまり、助成アクセス)についての認証(つまり、あなたが誰であるかを証明する)、についてです、ボーエンをお勧めします:ビューのOpenIDやOAuthのユーザの視点から

Q:のOAuth2 OAuth1別の場所?誰かがそれを簡単かつOAuth1のOAuth2の違いを説明できますか?OAuth1は今、のOAuth2は時代遅れに実装すべきですか?私は、ほとんどがまだ使用して私容疑者のOAuth2の準備ができて作るのOAuthを使用している、のOAuth2の多くの実装が表示されません。その権利はありますか?
A:のOAuth2より良いサポートは、ブラウザベースのアプリケーションではありません。ブラウザベース、OAuthのための主要な課題となっていないアプリケーションのために。例えば、OAuth1.0で、デスクトップアプリケーションやモバイルアプリケーションは、ユーザがサービスを認証するために、ブラウザサービスを開き、アプリケーションにサービスから返されたトークンをコピーするために必要とされなければならないガイド。ここでの主な批判は、ユーザーエクスペリエンスのためです。それはユーザのアプリケーションのための許可を取得するための新しい方法かもしれない、OAuth2.0を使用します。
OAuth2.0はもはや重要なクライアントアプリケーションを持っている必要がありません。これは、トークンと要求HMACのハッシュ文字列を取得するためのアプリケーションを必要としない古い認定のTwitterのAPI、を彷彿とさせます。OAuth2.0を使用して、アプリケーションがHTTPSによってトークンを取得することができます。
はるかに簡単なOAuth2.0署名プロセス。これ以上の特別な解析は、ソートしない、またはコーディング。
OAuth2.0アクセストークンは「短命」です。一般的に、OAuth1.0アクセストークンは年以上を格納することができます(Twitterのは、彼らが期限切れに聞かせたことがありません)。OAuth 2.0のリフレッシュトークンの概念。私はこれが何を意味するのか全くわからないが、私の推測では、あなたのアクセストークンは、短期保存(すなわち、セッションベース)とすることができ、あなたがトークンリフレッシュすることができるということです。あなたはむしろ、ユーザーがアプリケーションを再承認することができますよりも、新しいアクセストークンを取得するために更新トークンを使用しています。
最後に、OAuth2.0は、サーバーとユーザーの間で役割を作ることは明確な分離を持っている要求のOAuth認証サーバの処理を処理する責任を負っています。詳細については、上記の記事で詳しく説明。

Q:どのようにCSRFを防ぐために状態を使用してのOAuth2サーバーファーム?
:ただのランダムな文字列の状態は、あなたがこのような何か行うことができます:$状態= MD5(uniqid(ランド()、TRUE))を、 セッションに記録satate、あなたはそう後で検証を行うことができます。いくつかの追加情報:のOAuth2脅威モデル文書特にCSRF保護

おすすめ

転載: www.cnblogs.com/panchanggui/p/11588597.html