1

私はトークンベースの認証が初めてです。以下のリンクを参照して、トークンベース認証を理解しようとしています。許可トークンをGETメソッドに渡して、認可されたリソースにアクセスするにはどうすればよいですか?

ユーザーの資格情報が有効であれば、私は希望のトークンを取得しています。トークン

TWC1Q2rrenZC2p78KPnS4JblcepCg6q3XuxqBQIh7L003npbb6hlBAOYGRN03OvY_O55GWFkZp7UfCmhCgH9Z4rBsjvIrp8gyCp4HmxpP4axVKk10NM9fiG2ctgZWeSbw1jNOor42Wk3yMufbs4xP0RlNuvdpLtBLir52g9rPF053kiJtYryNGzPsbibXHRrNoy0wOR2384uLAJ5pNE9s1DwYpdPKB9uOLSAGhDQOVU生成

[AcceptVerbs("POST")] 
    [HttpPost] 
    public string Post([FromBody]User user) 
    { 
     if(user.Username == "hello" && user.Password == "123") 
     { 
      var accessTokenResponse = GenerateLocalAccessTokenResponse(user.Username); 

      return accessTokenResponse.ToString(); 
     } 
     else 
     { 
      return "User invalid"; 
     } 
    } 

、今

私はセキュリティ保護されたリソースにアクセスしよう

[Authorize] 
    [HttpGet] 
    // GET api/orders/5 
    public string Get() 
    { 
     return "This is a secure resource"; 
    } 

「アクセスが拒否されました」というエラーが表示されます。

トークンを使用してそのようなリソースにアクセスするにはどうすればよいですか。

非常に高く評価されているヘルプ/提案。おかげさまで

+0

おそらく、この回答はあなたにいくつかの洞察力を与えるかもしれません:http://stackoverflow.com/questions/38661090/token-based-authentication-in-web-api-without-any-user-interface/38670221#38670221 –

+0

はそれは今働いている? – jps

+0

@jps。はい。心から感謝します。 –

答えて

2

通常、トークンエンドポイントをコントローラのPOSTメソッドとして実装するのではなく、前述のチュートリアルのように別のクラス(SimpleAuthorizationServerProvide)を作成します。 すべてが正しくセットアップされている場合は、例えば要求を(送信あなたのhttpリクエスト

Authorization: Bearer TWC1Q2rrenZC2p78KP... 

にAuthorizationヘッダーを追加し、トークンを取得するには、ステータスコード200(OK)

で返信を取得する必要がありますツールfiddler)をトークンエンドポイント に転送します。あなたのサービスがポート52180のlocalhost上で実行されている場合、次のようになります。

POST http://localhost:52180/token 

grant_type=password&username=admin&password=123&client_id=abc 

grant_typeの部分はリクエストの本文です。 上記のリクエストを投稿すると、トークンのエンドポイントに到達します。 Taiseerがチュートリアルのステップ12で書いたのと同じように。

上記の要求を送信するとすぐに到達する必要がある、GrantResourceOwnerCredentialsにブレークポイントを設定します。

通常のフローは次のとおりです。 - クライアントはGrantResourceOwnerCredentialsでのユーザーの資格情報を認証しhttp://localhost:52180/token

  • サーバからトークンを要求し、トークン

  • クライアントがトークン応答からaccess_tokenはを読み出し

  • クライアントは、access_tokenを含む認証ヘッダーを要求に追加します。

    http://localhost:52180/api/orders 
    
    Authorization: Bearer TWC1Q2rrenZC2p78KP... 
    
  • (トークンが有効である場合)、サーバはAuthorizationヘッダとグラントアクセスを読み取る

  • サーバプロセスの要求、例えば、GET要求

  • クライアントは

ステータス200と所望のデータを受信します

上記のapiコントローラはokと思われます [Authorize]属性はコントローラで必要なものだけです。これにより、httpリクエストパイプラインにAuthorizationFilterが追加されます。これは、クライアントが上記のAuthoriztionヘッダーをリクエストに追加したときに承認を処理します。

+0

合意しました。しかし、どのように私は注文を取得するために承認トークンを追加するのですか? –

+0

を提案してくださいこれはTokenEnd()ですhttps://codepaste.net/nirv5q –

+0

私はすべてが一致しているかどうかをチェックしました。 –

関連する問題