如何在注销期间将自定义身份验证 属性 传递给 openid 连接中间件?
how to pass custom authentication property to openid connect middleware during signout?
我想将 url 参数传递到我的 idp 的结束会话端点。
我就是这样做的:
在我的客户端应用程序的注销操作中,我有:
var authprops = new AuthenticationProperties { RedirectUri = postSignoutReturnUrl };
authprops.Dictionary["custom"] = "custom";
HttpContext.GetOwinContext().Authentication.SignOut( authprops,
OpenIdConnectAuthenticationDefaults.AuthenticationType,
CookieAuthenticationDefaults.AuthenticationType);
在我的 openid connect 中间件中我有:
new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = n =>
{
....
if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)
{
//the state is null during signout !!!
if (n.ProtocolMessage.State != null)
{
var protectedState = n.ProtocolMessage.State.Split('=')[1];
var state = n.Options.StateDataFormat.Unprotect(protectedState);
if (state.Dictionary.TryGetValue("custom", out string customParam))
n.ProtocolMessage.SetParameter("custom", customParam);
}
}
return Task.CompletedTask;
},
关于如何正确执行此操作的任何建议?
调用 owinContext.Signout(authenticationProperties, ...)
后,可以通过 owinContext.Authentication.AuthenticationResponseRevoke.Properties
.
访问 authenticationProperties
同样,您可以访问以下的 authenticationProperties:
owinContext.SignIn(authenticationProperties, ...)
➡ owinContext.Authentication.AuthenticationResponseGrant.Properties
owinContext.Challenge(authenticationProperties, ...)
➡ owinContext.Authentication.AuthenticationResponseChallenge.Properties
IOwinContext
可以在 RedirectToIdentityProviderNotification.OwinContext
中找到(它是 Microsoft.Owin.Security.Provider.BaseContext
的一部分。
我想将 url 参数传递到我的 idp 的结束会话端点。
我就是这样做的:
在我的客户端应用程序的注销操作中,我有:
var authprops = new AuthenticationProperties { RedirectUri = postSignoutReturnUrl };
authprops.Dictionary["custom"] = "custom";
HttpContext.GetOwinContext().Authentication.SignOut( authprops,
OpenIdConnectAuthenticationDefaults.AuthenticationType,
CookieAuthenticationDefaults.AuthenticationType);
在我的 openid connect 中间件中我有:
new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = n =>
{
....
if (n.ProtocolMessage.RequestType == OpenIdConnectRequestType.Logout)
{
//the state is null during signout !!!
if (n.ProtocolMessage.State != null)
{
var protectedState = n.ProtocolMessage.State.Split('=')[1];
var state = n.Options.StateDataFormat.Unprotect(protectedState);
if (state.Dictionary.TryGetValue("custom", out string customParam))
n.ProtocolMessage.SetParameter("custom", customParam);
}
}
return Task.CompletedTask;
},
关于如何正确执行此操作的任何建议?
调用 owinContext.Signout(authenticationProperties, ...)
后,可以通过 owinContext.Authentication.AuthenticationResponseRevoke.Properties
.
同样,您可以访问以下的 authenticationProperties:
owinContext.SignIn(authenticationProperties, ...)
➡owinContext.Authentication.AuthenticationResponseGrant.Properties
owinContext.Challenge(authenticationProperties, ...)
➡owinContext.Authentication.AuthenticationResponseChallenge.Properties
IOwinContext
可以在 RedirectToIdentityProviderNotification.OwinContext
中找到(它是 Microsoft.Owin.Security.Provider.BaseContext
的一部分。