Основная проблема заключается в том, что я не смог найти правильный способ выхода из системы identityServer4.Выход из системы OpenIDConnect AspNetCore с использованием id_token
Подробное описание:
стороне клиента startup.cs веб-приложение содержит следующий код
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies",
AutomaticAuthenticate = true
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
AuthenticationScheme = "oidc",
SignInScheme = "Cookies",
Authority = "http://localhost:1941/",//local identityServer4
ClientId = "testsoft",
ClientSecret = "secret",
ResponseType = "code id_token token",
GetClaimsFromUserInfoEndpoint = true,
RequireHttpsMetadata = false,
Scope = { "openid", "profile", "email" },
TokenValidationParameters = new TokenValidationParameters()
{
NameClaimType = "name",
RoleClaimType = "role"
},
AutomaticAuthenticate = false,
AutomaticChallenge = true
});
IdentityServer4 работает локально имеет клиент добавил ниже
new Client
{
ClientId = "testsoft",
ClientName = "testsoft",
ClientSecrets = new List<Secret>
{
new Secret("secret".Sha256())
},
ClientUri = "http://localhost:55383/",//clientside web application url
AllowedGrantTypes = GrantTypes.Hybrid,
AllowAccessTokensViaBrowser = true,
RedirectUris = new List<string>
{
"http://localhost:55383/signin-oidc"
},
RequireConsent = false,
AllowedScopes = new List<string>
{
StandardScopes.OpenId.Name,
StandardScopes.Profile.Name,
StandardScopes.Email.Name,
StandardScopes.Roles.Name,
StandardScopes.OfflineAccess.Name,
"api1", "api2",
},
},
Я был в состоянии войти в систему и отображать формулы на контроллер в MVC, подобный этому
[Authorize]
public IActionResult About()
{
return View((User as ClaimsPrincipal).Claims);
}
И отображаемый вид был таким. Обратите внимание, что нет id_token
И я был в состоянии выйти из системы, используя куки, как указано ниже
public async Task<IActionResult> LogOut()
{
await HttpContext.Authentication.SignOutAsync("Cookies");
return Redirect("~/");
}
Но проблема в том, что я не могу найти способ отключала от IdentityServer. Чем ближе я пришел, я должен был использовать /connect/endsession?id_token_hint=...&post_logout_redirect_uri=https://myapp.com
Но я не смог найти способ получить raw id_token в коде. В методе About(), приведенном выше, я получаю только претензии (которые, я думаю, является расшифрованным содержимым id_token), и в этом списке претензий нет id_token. Но каким-то образом удалось получить id_token от скрипача по этому URL-адресу http://localhost:55383/signin-oidc, а затем выходить из системы с помощью identServer (с помощью приведенного выше URL-адреса).
У меня есть следующие вопросы:
- Как получить id_token в коде? (вместо ручного копирования от скрипача)
- Есть ли лучший способ выхода из системы? Или существует способ рамки AspnetCore/Oidc для выхода из системы (который, в свою очередь, вызывает правильный сервер api с правильными параметрами)?
- Мне удалось выйти и войти в систему несколько раз, но id_token был замечен тем же самым на скрипаче. например: пользователь Bob, пользователь Alice имел одинаковый id_token. Cookie был очищен, и каждый раз, когда в представлении отображался другой пользователь, id_token был таким же. не должен ли id_token быть другим для каждого пользователя/пользователя?
- Вывод URL-адреса работал, даже когда я дал случайную строку как id_token. Означает ли это, что функция выхода IdentityServer4 не работает на основе id_token?
Вы нашли ответы на свои вопросы? Я сталкиваюсь с теми же проблемами. –