Мой поток процессов:
- Пользователь входит в приложение эмитента (имя пользователя / пароль)
- Кликает ссылку клиентского приложения, которую он хочет перейти
- Приложение эмитента создает jwt и сохраняет его в Cook ie
- Приложение эмитента делает Response.Ridirect для клиентского приложения
- Клиентское приложение аутентифицирует пользователя, используя jwt в Cook ie и создает Принципал и автоматически входит в систему пользователя.
Ниже приведены настройки моего клиентского приложения при запуске ConfigureServices метод:
var key = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("password"));
SigningCredentials SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidIssuer = "issuerapp",
ValidateAudience = false,
ValidAudience = "clientapp",
ValidateIssuerSigningKey = true,
IssuerSigningKey = SigningCredentials.Key,
RequireExpirationTime = false,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.ClaimsIssuer = "issuerapp";
options.TokenValidationParameters = tokenValidationParameters;
options.SaveToken = true;
})
.AddCookie(JwtBearerDefaults.AuthenticationScheme,
options =>
{
options.Cookie.HttpOnly = true;
options.Cookie.Name = Configuration.GetValue<string>("AppSettings:CookieName");
options.AccessDeniedPath = authenticationSettings.AccessDeniedPath;
options.Events = new CookieAuthenticationEvents
{
// Check if JWT needs refreshed
OnValidatePrincipal = RefreshTokenMonitor.ValidateAsync,
OnSigningOut = (context) =>
{
context.HttpContext.Response.Redirect(Configuration.GetValue<string>("AppSettings:LogoutPath"));
return Task.CompletedTask;
},
};
});
В моем клиенте Приложение У меня все контроллеры украшены атрибутом [Authorize].
Мне нужно, чтобы клиентское приложение автоматически аутентифицировало пользователя с помощью jwt. Что не происходит с использованием вышеупомянутых конфигураций. Мой AccessDeniedPath (метод действия) также не получает попадания.
Обходной путь, который я использовал, заключается в перенаправлении пользователя из приложения эмитента на действие входа в клиентском приложении, где:
- Я прочитал JWT от Повара ie
- Подтвердите JWT, чтобы получить Принципал
- Вызовите httpContext.SignInAsyn c
Как я могу Получить пользователь вошел автоматически с помощью jwt.
Любая помощь / указатель приветствуется.
Спасибо.