Identity Server 4 swagger Перенаправление аутентификации OAuth с аутентификацией на пользовательский интерфейс swagger не работает asp.net core 2.2 - PullRequest
0 голосов
/ 09 января 2019

Попытка реализовать проверку подлинности swagger oAuth в ядре asp.net 2.2. Возможность входа на идентификационный сервер, но не может перенаправить на пользовательский интерфейс Swagger.

Конфигурация сервера идентификации

public IEnumerable<ApiResource> GetApiResources()
        {
            return new List<ApiResource>
            {
                new ApiResource( ConstantValue.ClientDashApi, ConstantValue.ClientApi)
            };
        }


        public IEnumerable<Client> GetClients()
        {
            var client = new List<Client>
            {
                new Client
                {
                     ClientId = ConstantValue.ClientId,
                    ClientName = ConstantValue.ClientName,
                    AllowedGrantTypes = GrantTypes.Implicit,
                    AllowAccessTokensViaBrowser = true,
                    RequireConsent = false,
                    RedirectUris =           {
                        $"{Configuration["IdentityServerUrls:ClientUrl"]}/assets/oidc-login-redirect.html",
                        $"{Configuration["IdentityServerUrls:ClientUrl"]}/assets/silent-redirect.html"
                    },
                    PostLogoutRedirectUris = {$"{Configuration["IdentityServerUrls:ClientUrl"]}?postLogout=true"},
                    AllowedCorsOrigins =     { Configuration["IdentityServerUrls: ClientUrl"] },

                    AllowedScopes =
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                        ConstantValue.ClientDashApi
                    },
                    IdentityTokenLifetime=120,
                    AccessTokenLifetime=120
                },
                new Client
                {
                    ClientId = ConstantValue.SwaggerClientId,
                    ClientName = ConstantValue.SwaggerClientName,
                    AllowedGrantTypes = GrantTypes.Implicit,
                    AllowAccessTokensViaBrowser = true,

                    RedirectUris =
                    {
                        $"{Configuration["IdentityServerUrls:ClientApiUrl"]}/swagger/oauth2-redirect.html",
                        $"{Configuration["IdentityServerUrls:ClientApiUrl"]}/swagger/o2c.html"
                    },
                    AllowedCorsOrigins =     { Configuration["IdentityServerUrls: ClientApiUrl"] },
                    PostLogoutRedirectUris = { $"{Configuration["IdentityServerUrls:ClientApiUrl"]}/swagger/"},
                    AllowedScopes = {ConstantValue.ClientDashApi},
                },
            };
            return client;
        }

        public IEnumerable<IdentityResource> GetIdentityResources()
        {
            return new List<IdentityResource>
            {
                new IdentityResources.OpenId(),
                new IdentityResources.Profile()
            };
        }

Код клиента

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    // base-address of your identityserver
                    options.Authority = Configuration["ConstantUrls:IdentityServerAuthority"];
                    options.RequireHttpsMetadata = false;
                    // name of the API resource
                    options.Audience = "mero-rental-client-api";
                });

services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new Info { Title = "Mero Rental Web API", Version = "v1" });
                options.AddSecurityDefinition("oauth2", new OAuth2Scheme
                {
                    Type = "oauth2",
                    Flow = "implicit",
                    AuthorizationUrl = $"{Configuration["ConstantUrls:IdentityServerAuthority"]}connect/authorize",
                    TokenUrl = $"{Configuration["ConstantUrls:IdentityServerAuthority"]}connect/token",
                    Scopes = new Dictionary<string, string>()
                    {
                        { ConstantValue.ClientDashApi, ConstantValue.ClientApi }

                    }
                });
                options.OperationFilter<AuthorizeCheckOperationFilter>(); // Required to use access token
            });



app.UseSwagger();
            // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), 
            // specifying the Swagger JSON endpoint.
            app.UseSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/swagger/v1/swagger.json", "Mero Rental API V1");
                options.OAuthClientId(ConstantValue.SwaggerClientId);
                options.OAuthAppName(ConstantValue.SwaggerClientName);
            });

Вот журналы консоли console logs browser details debugging code

Я могу успешно войти на сервер идентификации. После этого страница не перенаправляется обратно в интерфейс пользователя. Ошибки отображаются на изображении веб-страницы.

Вот ссылка, которую я использовал для создания аутентификации

https://github.com/scottbrady91/IdentityServer4-Swagger-Integration/blob/master/src/Api.Swashbuckle/Startup.cs

https://dave.vanherten.ca/2017/03/swagger-identityserver4-part2/

...