2017-12-22 31 views
1

質問:ここで何か不足しているか、実際にどの機能を呼び出すべきかを誤解していますか?Owin OAuth2.0 PasswordGrant flow

私はOwin.OAuthを使用してOAuth2を実装するためのテストWebApiプロジェクトを作成することで簡単に始めました。ルートを押すと、プロバイダに足を踏み入れることは問題ありませんが、ここのコードです: 起動クラス:

public void Configuration(IAppBuilder app) 
    { 
     var config = GlobalConfiguration.Configuration; 

     app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new OAuthProvider(), 
      AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(60), 
      AllowInsecureHttp = true 
     }); 

     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());   

     WebApiConfig.Register(config);    
    } 

そして今ベアボーンProviderクラスのため:

public class OAuthProvider : OAuthAuthorizationServerProvider 
    { 

    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
    { 
     return base.ValidateClientAuthentication(context); 
    } 

    public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     return base.GrantResourceOwnerCredentials(context); 
    } 
} 

私が使用していますよパスワードグラントhttps://tools.ietf.org/html/rfc6749#section-4.3.2今OAuthAuthorizationServerProviderドキュメントに従ってGrantResourceOwnerCredentialsの機能は次のような場合に呼び出されます。

トークンエンドポイントへのリクエストは、「パスワード」の「grant_type」で到着したときに呼び出されます。これは、ユーザーがクライアントアプリケーションのユーザーインターフェイスに直接名前とパスワードの資格情報を提供し、クライアントアプリケーションがこれらを使用して「access_token」とオプションの「refresh_token」を取得した場合に発生します。

しかし、私がルートにヒットすると、常にValidateClientAuthentication関数に入ります。

ポストマンペイロード:

POST /Token HTTP/1.1 
Host: localhost:57507 
Content-Type: application/x-www-form-urlencoded 
Cache-Control: no-cache 
grant_type=password&username=test&password=test123 

はまたポストマン経由にBasicAuthを使用してみました:

POST /Token HTTP/1.1 
Host: localhost:57507 
Content-Type: application/x-www-form-urlencoded 
Authorization: Basic dGVzdDp0ZXN0MTIz 
grant_type=password 

は、私がここで何かが足りないか、それがどのように動作するか誤解のですか?

答えて

0

私はこれを尋ねたときにコールの流れを正しく解釈していませんでした。

私は、最初に呼び出される機能がパスワード付与を使用するときはGrantResourceOwnerCredentialsであると考えていました。 OAuth Spec Doc Password Grant.実際には常にValidateClientAuthenticationと呼ぶつもりですが、GrantResourceOwnerCredentialsです。

これは私のところでの誤解でした。このサンプルコードは機能していました。

0

基本メソッドを呼び出す代わりにGrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext)メソッドの本体に資格情報を検証するメソッドを "記述"する必要があります。 context.Validated(ClaimsIdentity)メソッドに電話すると、応答としてベアラートークンが取得されます。

この良い例との質問があります - see first code block in question

またはあなたは、例を参照することができますhere

ValidateClientAuthenticationちょうどあなたの資格情報 "grant_type =パスワード&ユーザ名=テスト&パスワード= test123"

を検証しますそれ以外の場合は、あなたのコードは大丈夫です。

+0

はい、正しいです。このサンプルプロジェクトを設定して、実装していたプロジェクトがルーティングに関する問題を引き起こしているかどうかを確認しました。しかし、私はそれがDocsからどう働いているのかを誤解していました。 – BioSafety