Процесс аутентификации
Процесс аутентификации выглядит следующим образом: вход в систему во внешнем интерфейсе перенаправляется на конечную точку входа в систему. AuthController и запускает процесс OpenId Connect. Таким образом, вы проходите аутентификацию поставщиком удостоверений и файлы cookie устанавливаются для пользователя. Они отправляются при каждом вызове API для проверки подлинности запроса.
В процессе создаются 3 файла cookie:
Cookie #1 :
- Имя = .AspNetCore.Cookies
- Значение = chunks-2
< /ul>
Печенье №2: - Имя = .AspNetCore.CookiesC1
- Значение = CfDJ8GRK-GHfascFTvp0o_E7oKZU-6GOAbUGCPHZZPfewEv12PmKgr46gfeTQC351e-Jnxq8SxzjJEgboIedIPCO11Q […]
- Имя = .AspNetCore.CookiesC2
< li>Значение = 8G86qN27NOS2Z-75XqY34d-ID1nOELpPaHUIe2EkFZMmfjrYSKA2JaU30p4Ozh8RyxZXTpFCRV8
[*] Как эти файлы cookie .AspNetCore используются для аутентификация?
[*]Как генерируются имена и шифруются значения?
[*]Что содержат эти файлы cookie?
Мы пытались расшифровать файл cookie (Как вручную расшифровать файл cookie аутентификации ASP.NET Core?), чтобы понять, как он работает, но у нас это не сработало.
К сожалению, мы пока не нашли ответа на вопрос, как генерируется файл cookie (с именем и ценность) в теории.
Надеюсь, вопросы были понятны, и буду признателен, если кто-нибудь сможет на них ответить.
Фрагменты кода для лучшего понимания . Надеюсь
AuthController:
// https://auth0.com/blog/backend-for-fron ... nd-dotnet/
public class AuthController : Controller
{
public ActionResult Login(string returnUrl = "/login")
{
return new ChallengeResult(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties() { RedirectUri = returnUrl });
}
[Authorize]
public async Task Logout()
{
await HttpContext.SignOutAsync();
return new SignOutResult(OpenIdConnectDefaults.AuthenticationScheme, new AuthenticationProperties
{
//RedirectUri = Url.Action("Index", "Home")
RedirectUri = "/logout"
});
}
//[Authorize]
public ActionResult GetUser()
{
var jsonReturn = new Dictionary();
if (User != null && User.Identity.IsAuthenticated)
{
jsonReturn.Add("isAuthenticated", "true");
foreach (var claim in ((ClaimsIdentity)this.User.Identity).Claims)
{
jsonReturn.Add(claim.Type, claim.Value);
}
return Json(JsonConvert.SerializeObject(jsonReturn));
}
jsonReturn.Add("isAuthenticated", "false");
return Json(JsonConvert.SerializeObject(jsonReturn));
}
}
Запуск:
public void ConfigureServices(IServiceCollection services)
{
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(o =>
{
o.Cookie.SecurePolicy = CookieSecurePolicy.Always;
o.Cookie.SameSite = SameSiteMode.Strict;
o.Cookie.HttpOnly = true;
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => ConfigureOpenIdConnect(options));
}
private void ConfigureOpenIdConnect(OpenIdConnectOptions options)
{
options.Authority = ;
options.ClientId = "";
options.ClientSecret = "";
options.ResponseMode = OpenIdConnectResponseMode.FormPost;
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("offline_access");
options.CallbackPath = new PathString("/callback");
options.SaveTokens = true;
options.UseTokenLifetime = false;
}
Подробнее здесь: https://stackoverflow.com/questions/702 ... -in-theory
Мобильная версия