OWIN OpenIdConnect中间件 - 动态设置RedirectUri

时间:2015-06-04 13:31:31

标签: owin middleware openid-connect

有什么方法可以根据请求范围而不是应用程序范围为OpenIdConnectMessage设置RedirectUri属性?

我的应用程序正在为多个域(myapp.com,myapp.fr,..)提供服务,并且基于域,它确定了内容的默认语言。我需要在登录到IdP之后将用户带回到同一个域,因此我需要找到一种方法,如何通过在startup.cs中配置中间件选项来完成每个请求范围而不是应用范围设置RedirectUri。

3 个答案:

答案 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