簡體   English   中英

如何使用OWIN中間件在Web Api中實現OAuth2 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.

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