Я использую login.gov в asp. net основном приложении. Он настроен на Identity Server 4, что позволяет пользователям входить в систему с Azure AD, Google и Login.gov. Я могу войти / выйти со всеми ОДНАКО для loging.gov требуется звонок на следующий URL https://idp.int.identitysandbox.gov/openid_connect/logout? с параметрами строки запроса
id_token_hint post_logout_redirect_uri состояние
В процессе выхода из Identity Server, как я могу получить эти другие параметры?
В текущий момент, используя один из быстрых стартов он выполняет
if (vm.TriggerExternalSignout)
{
// build a return URL so the upstream provider will redirect back
// to us after the user has logged out. this allows us to then
// complete our single sign-out processing.
string url = Url.Action("Logout", new { logoutId = vm.LogoutId });
// this triggers a redirect to the external provider for sign-out
return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme);
}
Я подключен в классе запуска для этого внешнего провайдера
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProviderForSignOut = context =>
{
string tokenHint = context.ProtocolMessage.IdTokenHint;
var postLogoutUri = context.Properties.RedirectUri;
if (!string.IsNullOrEmpty(postLogoutUri))
{
if (postLogoutUri.StartsWith("/"))
{
// transform to absolute
var request = context.Request;
//postLogoutUri = request.Scheme + "://" + request.Host + request.PathBase + postLogoutUri;
postLogoutUri = request.Scheme + "://" + request.Host + postLogoutUri;
}
}
var logoutUri = $"{appConfig.LoginGov.Domain}/openid_connect/logout?id_token_hint={tokenHint}&post_logout_redirect_uri={postLogoutUri}&state={state}";
context.Response.Redirect(logoutUri);
context.HandleResponse();
return Task.CompletedTask;
}
};
Это выполняется, но я не могу перехватить id_token_hint и параметры состояния. Идеи?
Я подумал, что смогу перехватить в методе Logout и отправить в качестве параметра аутентификации, но я также не могу перехватить его там.
return SignOut(new AuthenticationProperties { RedirectUri = url }, vm.ExternalAuthenticationScheme);