web-dev-qa-db-ja.com

OWINミドルウェアを使用してWebApiにOAuth2Authorization_Codeフローを実装するにはどうすればよいですか?

簡単な概念実証を作成しようとしていますOAuth有効なアプリケーションですが、認証コードの実装に固執しています。読んだところはどこでも、実際には認証を使用していないようです。コードフロー。情報として次のリソースを使用しています。

カスタムOAuthAuthorizationServerProviderを使用してWebAPIとOWINをセットアップし、更新トークンのパスワード付与タイプと、更新トークンをアクセストークンと交換する機能を受け入れます。これはうまく機能していますが、ブラウザーをサーバーにリダイレクトして認証し、認証コードを使用してクライアントにリダイレクトするシナリオを設定したいと思います。次に、クライアントが認証コードをトークンエンドポイントに送信して、更新トークンを取得するようにします

Webサーバーアプリの下の2番目のリンクで、次のようなリクエストからWebAPIアプリに認証コードを表示させようとしています 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);
    });

承認エンドポイントを有効にするために追加した部分は、認証サーバーオプションのプロパティです。

AuthorizeEndpointPath = new PathString("/auth"),
AuthorizationCodeExpireTimeSpan = TimeSpan.FromMinutes(1),
AuthorizationCodeProvider = new AuthorizationCodeProvider(),

AuthorizationCodeProviderの実装でのオーバーライドは、実装されていない例外をスローしますが、現在、コードに設定されているブレークポイントにさえヒットしていません。注意すべき点の1つは、postmanを使用して認証エンドポイントにアクセスすると、HTTPAPI/2.0のサーバーヘッダーが返されることです。これは、そのエンドポイントに何かが表示されていない場合とは異なります。つまり、リクエストを送信する必要があります。間違って。誰かが私のセットアップの問題を見ることができますか?事前のおかげで、これが明らかにOWINとOAuthの理解に失敗していることを知っています。

10
Joshua Belden

IdentityServer を見てください。それはオーウィンに基づいています。 サンプルリポジトリ もあります。ここでは、自己展開型および/またはサードパーティのIDプロバイダーを使用した多くの例を見つけることができます。

これ 例があなたに最も適していると思います。

3
balbelias

Katanaに組み込まれているOAuth2認証サーバーで注意すべきことの1つは、それがtransparentであるということです。独自の/ authエンドポイントを提供するか(MVCやNancyなどを使用)、直接同意する必要がありますOAuthAuthorizationServerProvider.AuthorizationEndpointのフォーム

完全なサンプルについては、 https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Mvc を参照してください。 Katanaに組み込まれているOAuth2承認サーバーを使用しませんが、OpenID Connectを対象とするはるかに精巧なフォークを使用しますが、アイデアを得る必要があります。

4
Pinpoint