Spring Cloudクラウドアーキテクチャ-SSOシングルポイント登録のOAuth 2.0登録認証(1)

6237 ワード

今日はOAuth 2.0の統合方式についてメモを取ります.まずインターネットでOAuth 2.0に関する基礎知識を探しました.皆さんの知識点を振り返ってみてください.
一、oauthのキャラ
client:リソースサーバAPIのアプリケーションを呼び出します.
Oauth 2.0 Provider:Authorzation ServerとResource Serverを含む.
(1)Authorzation Server:認証サーバで認証と認証を行う
(2)Resource Server:資源サーバ、保護された資源userを保護する:資源の所有者
二、Oauth 2.0 Providerを詳しく紹介します.
Authorzation Server:
(1)[AuthorizationEndpoint](http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/endpoint/AuthorizationEndpoint.html): ,Default URL:/oauth/authorize`
(2)TokenEndpoint:tokenのサービスを取得し、Default URL:/oauth/tokenResource Server:
OAuth 2 Authentication Processing Filter:アクセストークンの要求に認証をロードする
三、Authorzation Serverを詳しく紹介します.
一般的には、2つの構成クラスを作成し、AuthoriationServer Configrer Adapterを継承し、WebSecurityConfigrer Adapterを継承し、中の方法を複写します.
主に現れた二つの注釈:
1、@EnbaleAuthortionServer:認証サーバを宣言します.この注釈を使うと、アプリケーションが起動したら自動的にいくつかのEntが生成されます.
/oauth/authorize:検証
//oauth/token:tokenを取得する
//oauth/confirm_access:ユーザ授権
//oauth/error:認証失敗
//oauth/check_token:リソースサーバはtokenを検証するために使用されます.
//oauth/token_key:jwtモードの場合は、認証サーバから公開鍵を取得するためにこれを使用することができます.
これらのendpointは全部ソースのendpointカバンの中にあります.
2、@Bens:AuthortionServerConfigrerを実現する必要があります.
AuthortionServerConfigrerは、3つの構成を含む:
Client Details ServiceConfigrer:clientクライアントの情報構成、client情報は以下を含む:clientId、secret、scope、authorized GrantTypes、authorities
(1)scope:権限範囲を表し、オプションが可能で、ユーザーがページを授権する時に選択します.
(2)authorized GrantTypes:四つの授権方法があります.
  • Authorzation Code:検証でコードを取得し、コードでtokenを取得する(最も多く使うのも安全な方法である)
  • Implicit:陰式授権モード
  • Cient Credentials(App Access Tokenを取得するために使用する)
  • Resource Owner Password Credentials
  • (3)authorities:clientに権限を与える
    ここの具体的な実現には様々な種類があります.in-memory、JdbcCleientDetails Service、jwtなど.
    AuthoriationServerSecurityConfigrer:安全制約を宣言します.どのようなアクセスが許可されていますか?
    AuthoriationServerEndpoints Configrer:ライセンスとtokenのエンドポイントとtokenのサービスのいくつかの構成情報を表明しています.例えば、どのような記憶方式、tokenの有効期限などですか?
    clientの情報の読み取り:Client Details ServiceConfigrer類の中で配置して、in-memory、jdbcなどの多種の読取方式があります.
    jdbcはJdbc ClienntDetails Service類を呼び出す必要があり、このような種類は該当するDataSourceに入る必要があります.
    これからtokenの管理方法を紹介します.[AuthorizationServerTokenServices](http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/token/AuthorizationServerTokenServices.html) : token (1)tokenが作成された後、その後のトークンへのアクセスを許可するために保存されたリソースはそれを参照することができる.
    (2)トークンにアクセスして認証をロードする
    インターフェースの実装も様々です.[DefaultTokenServices](http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/provider/token/DefaultTokenServices.html) , InMemoryTokenStore, token;tokenストレージ方式は、3つの種類があります.
    (1)InMemory Token Store:メモリを保存すると、永続化しません.
    (2)Jdbc Token Store:データベース保管中
    (3)Jwt:Json web token
    授権の種類:
    AuthortionServerEndpoints Configrerで設定できますが、デフォルトではパスワード以外のすべてのライセンスタイプがサポートされます.関連する授権タイプのいくつかのクラス:
    (1)authenticationManager:直接AuthenticationManagerを注入して、自動的にパスワード授権タイプを開く
    (2)userDetails Service:UserDetails Serviceを注入すると、リフレッシュtoken認証タイプが起動され、ユーザがまだ生きているかどうかを判断します.
    (3)authorization CodeServices:AuthortionCodeServicesの例、auth code授権タイプのサービス
    (4)implicit GrantService:iml picit grant
    (5)token Granter:
    endpointのURLの構成:
    (1)AuthortionServer Endpoints ConfigrerのpathMapping()の方法は、二つのパラメータがあります.一つ目はデフォルトのURLパスで、二つ目はカスタムパスです.
    (2)WebSecurityConfigurの例では、保護が必要でない経路を設定することができます.デフォルトはすべて保護します.
    カスタムUI:
    (1)私たちはカスタム登録ページと認証ページが必要かもしれません.ページにログインすると、プレフィックス名のロゴを作成するだけでいいです.コードの中でアクセスが許可されるように設定されています.これにより、システムは自動的にログインページを実行します.このログインページのactionは認証の住所にジャンプする必要があります.
    (2)もう一つは授権ページで、オプションページにチェックを入れます.このページはソースコードの実現を参考にして、自分でcontrollerの種類を生成し、対応するウェブページを作成すればユーザー定義の機能を実現できます.
    以下はライセンス取得tokenの流れを整理します.
    (1)ポート番号をあなたの認証サーバのポート番号に変えてください.idもあなたのものに変えます.タイプはcodeです.
    local host:8080/ua/oauth/authorize?client_id=client&reponse_type=code&redirect_uri=http://www.baidu.com (2)ここでcodeの値を取得します.http://www.baidu.com/?code=G0C20Z
    (3)このコード値を用いて最終的なtokenを取得する.
    Crl-X POST-H「Can-Type:appplication/x-wn-form-urlencoded」-d'grant_type=authorization_code&code=G 0 C 20 Z&redict_uri=http://www.baidu.com''http://client:secret@local host:8080/ua/oauth/token「
    戻り値:
    {accessitken”:「b 251 b 453-c 08-49 d-9 aedf 58 e 6 ca 3」、「tokenuutype」:「bearr」、「expiress Gauin」:2591324、「scope」:「app」
    (4)このtoken値を使ってリソースサーバのコンテンツを呼び出します.(リソースサーバと認証サーバが同じアプリケーションにいるなら、リソースサーバは自分でtoken値を解析します.不在の場合は自分で処理します.)
    curl-H「Authorzation:Berr b 251 b 453-c 08-485 0-9 aef 58 e 6 ca 3」「local host:8081/service 2(ここであなた自身のurlに両替します)」
    四、Resource Server:リソースを保護するには、トークンが必要です.
    設定類に注釈を加えると@EnbleResource Serverが起動します.Resource Server Configrerを使って構成する:
    (1)tokenServices:Resource Server Token Servicesの例は、tokenのサービスを宣言しています.
    (2)reourcered:リソースIdは、auth Serverによって検証される.
    (3)他のいくつかの拡張点、例えば要求からtokenのtoken Extractorを抽出することができる.
    (4)いくつかのカスタムリソース保護構成は、HttpSecurityによって設定されています.
    tokenを使う方法にも二つがあります.
    (1)Berer Token(https伝送方式は伝送過程の安全を保証する):主流
    (2)Mac(http+sign)
    リソースサーバのAPIにはどうやってアクセスしますか?
    リソースサーバとライセンスサーバが同じアプリケーションにある場合、Default TokenServicesを使用すると、必要なすべてのインターフェースが実現されるので、この点をあまり考慮する必要はありません.自動的に一致します.リソースサーバが別のアプリケーションである場合は、認証サーバの機能にマッチすることを確認し、トークンを正しく復号するためのResource Server TokenServicesを提供しなければなりません.ライセンスサーバと同様に、Default Token Servicesを頻繁に使用できます.オプションはほとんどToken Store(バックエンドメモリまたはローカルコード)によって表されます.
    (1)requestのtokenをチェックする時、RemoteToken Servicesを使ってAuthServerの中の/auth/check_を呼び出します.token
    (2)共有データベースは、Jdbcを使ってtokenを保存し、AuthServerへの再アクセスを避ける.
    (3)JWT署名の方式を使用して、資源サーバ自身が直接検査を行い、任意の中間媒体を介さない.
    五、oauth client
    クライアントがtokenを取得した後、ダウンストリームサービスAPIを呼び出したい場合、tokenを転送するために、RestTemplateを使用して、その後、restit Templateを使用してアプリを呼び出すことができます.
    注:
    scopesとauthoritiesの違い:
    scopesはclientの権限で、少なくとも一つのscopeの権限を授けて、さもなくばエラーを報告します.
    authoritiesはユーザー権限です.
    以上はネットで見つけた素晴らしいブログです.早くOAuth 2.0を知ることができるようにお願いします.次の文章はOAuth 2.0の現在の枠組みの中での使用を正式に紹介します.
    これからは、最近開発されたspring cloudマイクロサービスクラウドの構築過程とエッセンスを記録して、spring cloudフレームを研究開発する興味のある友達を助けます.みんなでspring cloudアーキテクチャの構築過程と企業項目を検討します.完全なプロジェクトのソースコードの技術サポート1791743380