Фронт - 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