[英]How to obtain an Oauth2 bearer token in C# using authorization_code?
[英]How do I implement an OAuth2 Authorization_Code Flow in Web Api using OWIN Middleware?
我正在嘗試創建一個啟用OAuth的簡單概念驗證應用程序,但仍停留在授權代碼實現上。 我讀到的每個地方似乎都以一種或另一種方式運行,從不實際使用授權代碼流。 我一直在使用以下資源獲取信息:
我已經使用自定義OAuthAuthorizationServerProvider設置了Web api和owin,以接受刷新令牌的密碼授予類型,並能夠將刷新令牌交換為訪問令牌。 這很好,但是我想設置一個方案,在該方案中,我將瀏覽器重定向到服務器以進行授權,然后使用授權碼重定向回客戶端。 然后,我希望客戶端將授權代碼發送到令牌端點以獲取刷新令牌。
在Web服務器應用程序下的第二個鏈接中,我試圖讓我的Web API應用程序顯示來自請求的授權代碼,例如http://127.0.0.1/auth?response_type=code&client_id=123&redirect_uri=http://validredirect .com&scope = access ,但我一直收到404。
我已將owin配置如下:
var databaseContext = new AdnsfContext();
WebApp.Start(
new StartOptions("http://127.0.0.1:7000"),
appBuilder =>
{
var httpConfig = new HttpConfiguration();
httpConfig.MapHttpAttributeRoutes();
httpConfig.SuppressDefaultHostAuthentication();
httpConfig.Filters.Add(new HostAuthenticationFilter("Bearer"));
appBuilder
.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
ApplicationCanDisplayErrors = true,
AuthorizeEndpointPath = new PathString("/auth"),
TokenEndpointPath = new PathString("/token"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(1),
Provider = new AuthServerProvider(),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),
RefreshTokenProvider = new RefreshTokenProvider(),
})
.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer",
})
.UseCors(CorsOptions.AllowAll)
.UseWebApi(httpConfig);
});
我添加來啟用授權端點的部分是auth服務器選項的屬性:
AuthorizeEndpointPath = new PathString("/auth"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),
我對AuthorizationCodeProvider的實現中的重寫會引發未實現的異常,但當前它甚至沒有達到代碼中設置的任何斷點。 需要注意的一件事是,當我使用郵遞員訪問auth端點時,我獲得了HTTPAPI / 2.0的服務器標頭,這與該端點上根本沒有任何東西不同,這意味着我必須發送請求錯誤地。 有人可以看到我的設置有問題嗎? 在此先感謝您,我知道這顯然是我對OWIN和OAuth的不了解。
使用Katana內置的OAuth2授權服務器要注意的一件事是它是透明的 :您必須提供自己的/ auth端點(例如,使用MVC或Nancy)或直接在OAuthAuthorizationServerProvider.AuthorizationEndpoint中呈現您的同意書。
您可以查看https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc以獲取完整的示例。 它不使用Katana內置的OAuth2授權服務器,而是針對OpenID Connect進行了更為詳盡的分叉,但是您應該明白這一點。
看一下IdentityServer 。 它基於Owin。 還有示例存儲庫 ,您可以在其中使用自部署和/或第三方身份提供程序找到很多示例。
我認為這個例子最適合您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.