2017-10-03 9 views
0

OAuth機能を持つ.NET Core APIを作成しました。ユーザ認証の有無によるクライアントのOAuth認証

Iは、アクセストークンを受信し、私のコントローラのアクションにPolicyパラメータと要求AuthorizationヘッダとAuthorizeAttribute Sを使用して私のコントローラのアクションを呼び出すために、usernamepasswordと一緒に、grant_type=passwordを使用します。すべてが良いです。

ただし、対処方法がわからないシナリオがいくつかあります。たとえば...

ユーザーがまだ認証されていないときにAPIにアクセスできるようにするクライアントアプリケーション(複数存在することがあります)が必要な場合もありますが、私は世界に公開したくありません。つまり、一部のエンドポイントでは、特定のユーザーを認証する必要はありませんが、アクセスを制限する必要があります。その後、ユーザーはログインを選択して、承認に基づいてより多くのAPIにアクセスできるようになります。

どうすればよいですか?リクエストごとにclient_idclient_secretを渡す必要がありますか?もしそうなら、私はこれを私のAuthorizeAttributesでどのように処理するのですか?または、client_idclient_secretと空白のusernamepassword ....を使用して1回認証する必要があります。ユーザーが実際にすべての4つのパラメータでサインインすると、

〜私は時々いくつかの投票を得るようです。私が正しい質問をしたり、正しく言い表していないのであれば、私を助けてください。私は規則を読みましたが、私はまだ間違いを犯します。ありがとう。

答えて

0

エンドユーザーがいる場合はリソースオーナーパスワードの付与とそうでない場合はクライアントクレデンシャル付与を組み合わせることができます。

あなたのAPIゲートウェイに応じて、これは少し異なる動作をしますが、それは次のように要約:

  • クライアントの資格の付与が唯一のバックエンドが呼び出しを行っているどのアプリケーションを知っていることを確認します、エンドユーザのコンテキストなし
  • リソースオーナーパスワードは、エンドユーザコンテキストをこれに追加しますが、それ以外の場合は、CC認可と同様に動作します(認可コードグラントとは対照的に、UIを実装する必要はありません)暗黙の助成金)。

APIゲートウェイは、使用する許可に応じて、バックエンドにさまざまなヘッダーを追加することができます。このヘッダーを使用すると、どの種類の呼び出しがヒットしているかを確認できます。例えば、 Mashape Kongでは、CCとROの両方のグラントに対して常にX-ConsumerIdが得られますが、ROグラントでは、さらにX-Authenticated-UserId(およびスコープで作業する場合はX-Authenticated-Scope)も受信します。

あなたがあなた自身のOAuth2の実装をローリング(エヘン?)、あなただけのアクセスの種類を知るためにトークン(passwordまたはclient_credentials)を作成するために使用される許可タイプのためのトークンをイントロスペクトする必要がありますされている場合 - マシンとしてユーザー、またはエンドユーザーの代わりに - アプリケーションに提供します。

希望があります。