## I、EDITORIAL
データ、クエリを収集し、そして私がが、ほとんどの場合から、良い面と悪い面の両方の記事の多くのOAuth導入を学びました。だから私は一緒に整頓して、stackoverflowの上でいくつかの議論と併せて、公式の文書から始まると思います。二つの部分とのOAuth2に分かれOAuth1.0a仕上げ。
OAuth 1.0aの:片足- >両脚- >三の足
のOAuth 2:両脚- >三本足(附:リフレッシュ・トークン的方式)
両モデルは、左からの矢印によって増分右セキュリティにあり、その実装が比較的複雑になります。前述の記事では比較的まれな中国語の翻訳にはこの足の公式声明(足?)。以下は、OAuthの認証プロセスのこれらの5種類を紹介しました。
##二、OAuth1.0a
2.1のOAuth 1.0A(片足)
- 次のパラメータを使用して、署名リクエストを送信するサーバーアプリケーション:
- 空の文字列をoauth_token
- oauth_consumer_key
- oauth_timestamp
- oauth_nonce
- oauth_signature
- oauth_signature_method
- オプションoauth_version
- サービスの検証やリソースへのアクセス権を付与
- リソース使用要求の応用
2.2のOAuth 1.0aの(二足)
- アプリケーションは、リクエストトークンを取得するために署名したリクエストを送信します。
- oauth_consumer_key
- oauth_timestamp
- oauth_nonce
- oauth_signature
- oauth_signature_method
- オプションoauth_version
- サーバーは、リクエストトークンが返されました:
- oauth_token
- oauth_token_secret
- 追加パラメータ/引数
- アクセストークンリクエストトークン交換して、署名リクエストを送ります
- oauth_tokenリクエストトークン
- oauth_consumer_key
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- アクセストークンサーバとトークンシークレットで返されます
- アクセストークンとトークンシークレットによって要求されたリソースのアプリケーションの使用
2.3のOAuth 1.0aの(三本足)
- アプリケーションは、リクエストトークンを取得するために署名したリクエストを送信します。
- oauth_consumer_key
- oauth_timestamp
- oauth_nonce
- oauth_signature
- oauth_signature_method
- オプションoauth_version
- サーバーは、リクエストトークンが返されました:
- oauth_token
- oauth_token_secret
- oauth_callback_confirmed
- ...追加パラメータ/引数
- 許可されたユーザのURLに送信します
- oauth_token
- 認証用のユーザーにプロンプトを表示
- ユーザー認証
- 返品承認申請した後、点灯します:
- oauth_token
- oauth_verifier
- アクセストークンリクエストトークン交換して、署名リクエストを送ります
- oauth_tokenリクエストトークン
- oauth_consumer_key
- oauth_nonce
- oauth_signature
- oauth_signature_method
- oauth_version
- oauth_verifier
- アクセストークンサーバとトークンシークレットで返されます
- アクセストークンとトークンシークレットによって要求されたリソースのアプリケーションの使用
## 3、のOAuth2
3.1のOAuth 2(二脚)
3.1.1クライアントの資格情報方法
- アプリケーションサーバにリクエストを送信:
- grant_type = client_credentials
無許可(許可:基本のBase64(CLIENT_ID場合 :client_secret)) ヘッダのパラメータを添付しなければなりません。 - クライアントID
- client_secret
- grant_type = client_credentials
- サーバーが応答するアクセストークン
- アクセストークン
- expires_in
- TOKEN_TYPE
3.1.2暗黙的に付与された方法
- アプリケーションサーバにリクエストを送信:
- response_type =トークン
- これは、プロバイダまたは自分でホストされているサーバー側のリダイレクトURIであるREDIRECT_URI。
- 範囲
- オプションの状態
- クライアントID
- 認定に必要。
- ユーザ名
- パスワード
- サーバはREDIRECT_URIを含むaccess_tokenは含まれて対応させていただきます
- REDIRECT_URIへの応用ジャンプ
- フラグメントに対応してREDIRECT_URI HTMLやスクリプト。access_tokenはパラメータだけでなく、あなたが必要な場合があります他のパラメータを含むスクリプトやHTML応答フラグメント。
3.1.3リソースの所有者のパスワードモード
- リソースの所有者の認証情報へのアプリケーション要求
- ユーザ名
- パスワード
- 資格情報を持つアプリケーション、サーバはに要求を送信します
- 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
- サーバー返さアクセス土気
- アクセストークン
- expires_in
- TOKEN_TYPE
3.2のOAuth 2(三本足)
- アプリケーションは、認可サービスにユーザーをリダイレクトします。
- クライアントID
- REDIRECT_URI
- response_type
- オプションの状態; CSRFから保護するための一意の識別子
- スコープオプション。あなたのアプリケーションがどのデータにアクセスすることができます。
URL看起来会像是:
oauth_service /ログイン/ OAuthの/オーソライズのclient_id = 3MVG9lKcPoNINVB&REDIRECT_URI =?のhttp:// localhost /をOAuthの/ code_callback&スコープ=ユーザー
- ユーザーは、アプリケーション・サーバーにログオンし、承認を確認します
- Serverは、偶発的なパラメータをREDIRECT_URLするようにユーザーをリダイレクトします。
- コード
- 状態
- コードを取得するためのアプリケーション、およびリターンアクセストークンで
- クライアントID
- client_secret
- コード
- オプションREDIRECT_URI;
- grant_type =「authorization_code」
- client_idとclient_secretが有効な場合、サーバーはコールバックREDIRECT_URLを呼び出します、access_tokenはが含まれています
- アクセストークン
- expires_in
- refresh_token
- 後続の要求で使用されるアプリケーションaccess_tokenはを、保存します。この値は、必要に応じて保存された認証要求として、パラメータまたはセッションやクッキーであるのが典型的です。
3.3 OAuth 2 (Refresh Token 刷新token)
OAuth2では、トークン有効期限は次のようになります、私たちはrefresh_tokenを行かなければならない、新しいトークンを生成するために、先に得られたいくつかの他のパラメータを使用します。これは、はるかに簡単なプロセスです。
- リフレッシュトークン要求を作成します。
- grant_type =「refresh_token」
- スコープオプション。事前に定義されていない新しいスコープを持つことができません。
- refresh_token
- クライアントID
- client_secret
- パラメータ以下のサービスの検証とレスポンス:
- アクセストークン
- で発行された
##第四に、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保護