有什么方法可以根据请求范围而不是应用程序范围为OpenIdConnectMessage设置RedirectUri属性?
我的应用程序正在为多个域(myapp.com,myapp.fr,..)提供服务,并且基于域,它确定了内容的默认语言。我需要在登录到IdP之后将用户带回到同一个域,因此我需要找到一种方法,如何通过在startup.cs中配置中间件选项来完成每个请求范围而不是应用范围设置RedirectUri。
答案 0 :(得分:11)
这可以通过Notification
事件RedirectToIdentityProvider
完成。像这样:
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = async n =>
{
n.ProtocolMessage.RedirectUri = n.OwinContext.Request.Uri.Host;
n.ProtocolMessage.PostLogoutRedirectUri = n.OwinContext.Request.Uri.Host;
},
//other notification events...
}
`
答案 1 :(得分:0)
如果您使用 ResponseType = OpenIdConnectResponseType.CodeIdToken
,则需要在多个通知事件中设置 RedirectUri
。
在 AuthorizationCodeReceived
通知中,您可以在 RedirectUri
上设置 TokenEndpointRequest
以确保在令牌请求中也传递相同的值。
RedirectToIdentityProvider = n =>
{
n.ProtocolMessage.RedirectUri = redirectUrl;
// other settings
}
AuthorizationCodeReceived = n =>
{
n.TokenEndpointRequest.RedirectUri = redirectUrl;
// other settings
}
答案 2 :(得分:0)
我知道这是一个旧帖子,答案已经提到了。但是我还是花了一段时间才弄清楚如何设置动态 RedirectUri。
我在 OpenIdConnectAuthenticationOptions 和 RedirectToIdentityProvider 中分配了 RedirectUri,这导致了问题。
我们应该只在 RedirectToIdentityProvider 事件中分配 RedirectUri。
需要帮助的可以查看我的代码here