[英]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.