【问题标题】:How can I change the ReturnUrl for OpenID?如何更改 OpenID 的 ReturnUrl?
【发布时间】:2009-02-27 16:19:11
【问题描述】:

当用户单击我的站点中需要身份验证的链接时,浏览器将被重定向到登录页面。登录页面包含一个 returnUrl 查询字符串参数。问题是,如果用户使用 OpenID 进行身份验证,提供商会将用户重定向回登录页面并且不包含 returnUrl 参数,这很无聊,因为我将用户重定向到主页而不是尝试过的页面.

我正在使用 DotNetOpenID,有没有办法解决这个问题?

【问题讨论】:

    标签: openid dotnetopenauth


    【解决方案1】:

    这真的很容易,布鲁诺。只需拨打电话

    IAuthenticationRequest.AddCallbackArguments("returnUrl", Request.QueryString["returnUrl"]);
    

    这将告诉 DotNetOpenId 保留登录页面上的 returnUrl 参数并获得您想要的行为。我不同意 Franci 关于将显示登录页面的 URL 与处理结果的 URL 分开的观点。对于 ASP.NET MVC 站点,可能是合适的,但对于 ASP.NET Web 表单,这确实不是要走的路,因为除了向用户显示任何错误之外,您无疑还想也再次显示登录表单。此外,就逻辑分离而言,DotNetOpenId 库为您完成了所有繁重的工作,因此您的代码隐藏页面中几乎没有任何逻辑。

    【讨论】:

    • 应该是AddCallbackArguments
    • 没那么简单:“只有在向 OpenIdRelyingParty 提供 IRelyingPartyAssociationStore 时才支持回调参数。”
    【解决方案2】:

    如果希望 OpenID 提供者返回不同的 url,则需要在创建身份验证请求时使用 OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) 方法。

    但是,通常您不希望 OpenID 提供程序重定向回在您的应用中启动登录序列的 url。您想回到您启动 OpenID 身份验证以正确处理响应的位置。帮助将 OpenID 层与应用中的其余逻辑封装在一起。

    这是一个例子:

    在我的 ASP.NET MVC 应用程序中,我有一个带有 Authenticate 操作的 User 控制器来处理登录请求。

    Authenticate 操作检查 OpenIdRelyingParty.Response。如果是null,则操作调用RedirectToProvider。提供者返回到相同的操作,我检查Respons.Status。如果是AuthenticationStatus.Authenticated,我使用FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, true) 回到用户发起登录序列的页面。

    但是,如果状态为AuthenticationStatus.Failed 或“AuthenticationStatus.Canceled”,我可以为用户提供解决此问题的步骤。如果输入错误,我可以让他们更正他们的 OpenID,或者改为使用用户名/密码登录。 (我支持同一身份的 OpenID 和用户名/密码身份验证)

    我的登录框在每个页面上。如果 OpenID 提供程序将我重定向回发起登录请求的页面,则该页面可能无法正确处理失败。

    【讨论】:

    • 我把它和你的类似,但问题是当提供者将用户重定向回我的身份验证操作时,returnUrl 参数消失了......所以 RedirectFromLoginPage 不起作用......
    • 使用查询中的 returnUrl 调用 Authenticate 方法 - localhost/user/authenticate?returnurl=/somepage&uid=http://…。当 OpenID 提供者返回 Authenticate 方法时,returnUrl 应该再次出现在查询中。
    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多