Аутентификация ядра .net JwtBearer Генерация URL входа в систему единого входа - PullRequest
0 голосов
/ 05 сентября 2018

Фронт - React + Redux. Вернемся к .net Core 2.1 Web API

Использование KeyCloak в качестве единого входа. Подключение через OpenId Connect.

Использование этой статьи в качестве основы для моего кода.

Вот мой конфиг.

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

services.AddAuthentication(options => 
    options.DefaultSignOutScheme =
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
)
.AddJwtBearer(options =>
{
    options.Audience = "serviceName";
    options.Authority = "http://meycloakserver/auth/realms/myrealm";
    options.RequireHttpsMetadata = false;
    options.SaveToken = true;
    options.IncludeErrorDetails = true;
    options.Events = new JwtBearerEvents
    {
        OnAuthenticationFailed = (context) =>
        {
            context.NoResult();
            context.Response.StatusCode = 401;
            context.Response.ContentType = "application/json";

            return context.Response.WriteAsync(
                JsonConvert.SerializeObject(new ApiResponse(401, null, null)));
        }
    };
});

Для запросов без маркера ответа 401 Не авторизован. Все в порядке. Пример ответа JSON:

{
    "code": 401,
    "message": "Unauthorized",
    "payload": null,
    "success": false
}

Я хочу автоматически сгенерировать URL-адрес авторизации моего сервера ключей и отправить его клиентскому приложению, чтобы он мог перенаправить пользователя на свою страницу входа.

Если я использую аутентификацию cookie следующим образом:

services.AddAuthentication(options => ... )
.AddCookie("Cookies")
.AddOpenIdConnect(options => ... )

Для всех несанкционированных запросов он перенаправляет на действительную страницу входа в систему keycloak. Так что он может сделать это автоматически.

http://meycloakserver/auth/realms/myrealm/protocol/openid-connect/auth?client_id=myservice&redirect_uri=http%3A%2F%2Flocalhost%3A5000%2Fsignin-oidc&response_type=code&scope=openid%20profile&response_mode=form_post&nonce=636717449970904820.YjEzYWJkYTQtNGNmNy00ODc1LTllODEtMmE1NWU4MTUyMjFkODAzMzVmMjQtYjFjZC00OTdhLWEzZDMtMjBmMWM0MjM0N2Uw&state=CfDJ8EPjlwagOs9DsswIsauVFivnRIzrMmY50C1_3kT4IBGT1r4y3Z5r0uBGQ6Hg1QiqtygIR19YfssAuHwAT1L9xRm_ssrNJbBZ8j2V0vBRLvXQH5ibxvcIQVW4sfT2r8K5Vfl2na7BwqH8RKqqG8hoWzwaIYGecCSkJyKi-HXHYJLHljx6u7Udxu3RAXss3qXFgG-jVddwCkwRmxmNDUJc_3KsCIpqVWKcep8FVwtkk8YC_gTWO1Z862tuv8bvbjouvD88YkRsqBX4tc-RRuG-rB2z8zNDtwiWPpmDiz45SL2Q4HxZcLYwO_RUovwMnLof5WFsUSH-zmKzD_4IHSWJx2E&x-client-SKU=ID_NETSTANDARD1_4&x-client-ver=5.2.0.0
...