簡體   English   中英

Owin OAuth2.0 PasswordGrant流

[英]Owin OAuth2.0 PasswordGrant flow

問題:我是否在這里遺漏了一些東西或誤解了實際上應該調用什么功能?

因此,我通過創建一個測試WebApi項目以使用Owin.OAuth來實現OAuth2進行了簡單的介紹。 敲入Route並進入提供程序沒有問題,但是代碼如下:Startup Class:

    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);            
    }

現在,一個准系統提供程序類:

    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函數:

當對令牌端點的請求以“ password”的“ 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

還嘗試通過Postman使用BasicAuth:

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

我是否在這里遺漏了一些東西或誤解了它的工作原理?

您需要在GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext)方法主體中“描述”用於驗證憑證的方法,而不是調用基本方法。 當您調用context.Validated(ClaimsIdentity)方法時,會得到承載令牌作為響應。

有一個很好的例子的問題- 看到有問題的第一個代碼塊

或者您可以在這里看到示例

ValidateClientAuthentication只是驗證您的憑據“ grant_type = password&username = test&password = test123”

否則,您的代碼看起來還可以。

好的,所以當我問這個問題時,我錯誤地解釋了呼叫流程。

我以為使用密碼授予時要調用的第一個函數是GrantResourceOwnerCredentials OAuth規范文檔密碼授予。 實際上,它總是GrantResourceOwnerCredentials調用ValidateClientAuthentication然后再調用GrantResourceOwnerCredentials

所以這只是我的誤解。 此示例代碼正在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM