使用dotnetopenauth,我的代码在使用openId.CreateRequest(openIdIdentifier)
时工作正常。返回URL是/default.aspx,我不想这样指定return_to param我必须填写领域。第二个参数的desc是
// realm:
// The shorest URL that describes this relying party web site's address. For
// example, if your login page is found at https://www.example.com/login.aspx,
// your realm would typically be https://www.example.com/.
逻辑上正确的代码是
var request = openId.CreateRequest(openIdIdentifier, new Uri("http://localdev.com:8844/"), new Uri("http://localdev.com:8844/login"));
但是我得到了这个ProtocolException
openid.return_to参数 (http://localdev.com:8844/login?dnoa.userSuppliedIdentifier=http://myid.myopenid.com/) 与实际网址不匹配 (HTTP://localdev.com:8844 / Default.aspx的dnoa.userSuppliedIdentifier = HTTP://myid.myopenid.com/& openid.assoc_handle = ...) 请求是用。
WTF
如何在没有例外的情况下返回/登录?如果你能告诉我如何让它使用POST而不是GET
,你可以获得奖励积分答案 0 :(得分:1)
我假设您在浏览器上出现OpenID提供程序后出现此错误,并且在重定向回RP时,是吗?
您正在测试的提供商看起来正在将浏览器发送到错误的网址。但由于提供商不太可能无处制造“default.aspx”,我们需要查看日志以确切了解发生了什么。
你可以obtain logs locally by following these instructions。 或尝试使用此OpenID标识登录您自己的RP站点:http://test-id.org/RP/POSTAssertion.aspx这是一个诊断标识符,它将在http://test-id.org/TracePage.aspx生成日志消息。无论哪种方式收集它们,请将相关日志添加到您的问题中,以便我们更好地分析正在发生的事情。
答案 1 :(得分:0)
我今天遇到了类似的问题,尽管我使用的是纯MVC3。至少对于MVC,不需要使用CreateRequest()
发送returnUrl,只需将returnUrl作为参数传递给您的登录处理程序,如下所示:
查看:
<form action="/Login/LogOn?returnUrl=@returnUrl" method="post">
控制器:
[ValidateInput(false)]
public ActionResult LogOn(string returnUrl)
{...}
有趣的是,当RelyingParty.GetResponse()
不再为空时,即使在OpenID身份验证期间通过此方法第二次传递期间,returnUrl变量仍然可用。