2017-08-01 11 views
0

認証と承認のためのOIDCプロバイダとしてWSO2ISを使用します。認証コードの許可を使用して、私はアクセストークンを取得しました。自分の役割に基づいて特定のサービスにアクセスするようにユーザーに権限を与える必要があります。WSO2IS openid-connect:アクセストークンを使用したアクセス制御

これを解決するためにXACMLを使用しようとしましたが、REST API XACMLリクエストのヘッダーにusername:passwordのbase64エンコーディングを渡す必要があることがわかりました。その代わりに、アクセストークンを使用して、役割に基づいてサービスにアクセスするユーザーを認証する方法はありますか?

この部分は、リソースサーバーで発生します。私は、スコープを使ってアクセストークンに基づいてユーザーを認証するために、イントロスペクションエンドポイントを使用することができると考えました。しかし、スコープを使用してユーザーにアクセス制御を提供する方法を理解できません。

答えて

0

ユーザーが使用できるすべてのスコープを持つアクセストークンを取得するには、OAuth2クライアントが気にするすべてのスコープを要求し、トークンにはユーザーがアクセスできるスコープのみが含まれている必要があります。 this questionを参照してください。

はい、扱いにくいですが、OAuth2は主に承認委任プロトコルです。ユーザーは一部の権限(スコープ)をクライアントに委任できます。

また、ロールに基づいて権限を決定できる場合は、おそらくIDトークンからユーザーロールのリストを取得できます。

+0

WSO2ISのIDトークンにユーザーロールを追加/マップするにはどうすればよいですか?今では、at_hash、acr、sub、aud、azp、name、issなどのフィールドをid_tokenに取得するだけです。 –

+0

私はそれを行う方法がわかりませんが、(要求としての)役割はOpenID Connect RFCでカバーされませんが、実装によって提供される可能性があります。また、 'userinfo'エンドポイントもあります。このエンドポイントは、アクセストークンが許可する場合に情報を提供します。 –

+0

ユーザーのスコープを取得するには、ポストを通過してください。しかし、WSO2 API Managerはスコープを追加する唯一の方法ですか? WSO2 ISだけではできませんか?私の要件は簡単です。各ユーザーには、user1がservice1にアクセスでき、user2がservice2にアクセスできるような異なる特権があります。私はちょうどキー値のペア、[User1:Service1]、[User2:Service2]のような単純なユーザー/ロールの権限が必要です。 REST APIにアクセスする必要はありません。しかし、WSO2ISでは、特権がAPIエンドポイントにマッピングされ、GET、POST、アクセス制御などのHTTPアクションはこれらのAPIを通じてのみ発生することがわかりました。それはなぜそうですか? –