- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为 this 的延续问题,我在使用 dotnetopenauth 时遇到了问题。
我导航到我的信赖方代码并创建请求,但是当我的提供者收到请求时 OpenIdProvider.GetRequest()
返回空值。我查看了代码,据我所知,这是因为我的依赖方没有提供 openid 有效负载(request.form);但我不明白这是为什么。
代码:
依赖方:
public ActionResult Authenticate(string RuserName = "")
{
UriBuilder returnToBuilder = new UriBuilder(Request.Url);
returnToBuilder.Path = "/OpenId/Authenticate";
returnToBuilder.Query = null;
returnToBuilder.Fragment = null;
Uri returnTo = returnToBuilder.Uri;
returnToBuilder.Path = "/";
Realm realm = returnToBuilder.Uri;
var response = openid.GetResponse();
if (response == null) {
if (Request.QueryString["ReturnUrl"] != null && User.Identity.IsAuthenticated) {
} else {
string strIdentifier = "http://localhost:3314/User/Identity/" + RuserName;
var request = openid.CreateRequest(
strIdentifier,
realm,
returnTo);
var fetchRequest = new FetchRequest();
request.AddExtension(fetchRequest);
request.RedirectToProvider();
}
} else {
switch (response.Status) {
case AuthenticationStatus.Canceled:
break;
case AuthenticationStatus.Failed:
break;
case AuthenticationStatus.Authenticated:
//log the user in
break;
}
}
return new EmptyResult();
public ActionResult Index()
{
IRequest request = OpenIdProvider.GetRequest();
if (request != null) {
if (request.IsResponseReady) {
return OpenIdProvider.PrepareResponse(request).AsActionResult();
}
ProviderEndpoint.PendingRequest = (IHostProcessedRequest)request;
return this.ProcessAuthRequest();
} else {
//user stumbled on openid endpoint - 404 maybe?
return new EmptyResult();
}
}
public ActionResult ProcessAuthRequest()
{
if (ProviderEndpoint.PendingRequest == null) {
//there is no pending request
return new EmptyResult();
}
ActionResult response;
if (this.AutoRespondIfPossible(out response)) {
return response;
}
if (ProviderEndpoint.PendingRequest.Immediate) {
return this.SendAssertion();
}
return new EmptyResult();
}
IRequest i_request = OpenIdProvider.GetRequest();
工作正常,但是当我尝试转换时:
IAuthenticationRequest iR = (IAuthenticationRequest)i_request;
它给了我以下错误:
System.InvalidCastException was unhandled by user code
Message=Unable to cast object of type 'DotNetOpenAuth.OpenId.Provider.AutoResponsiveRequest' to type 'DotNetOpenAuth.OpenId.Provider.IAuthenticationRequest'.
Source=Portal
StackTrace:
at Portal.Controllers.OpenIdController.Index() in Controllers\OpendIdController.cs:line 35
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
\DotNetOpenAuth-4.1.0.12182\Samples\OpenIdWebRingSsoProvider\Code\Util.cs
(ProcessAuthenticationChallenge 函数)。但是,由于该函数需要
IAuthenticationRequest
但 OpenIdProvider.GetRequest 返回
AutoResponsiveRequest
我想我可以强制转换它以使用
IAuthenticationRequest
的属性和方法。类。显然我是错误的。
012-10-10 13:55:01,171 (GMT-4) [25] ERROR DotNetOpenAuth.Messaging - Protocol error: An HTTP request to the realm URL (http://localhost:1903/) resulted in a redirect, which is not allowed during relying party discovery.
Realm
的功能究竟是什么?与
ReturnTo
相反?使用示例代码,领域最终是
http://localhost:1903/
而 ReturnTo 最终是
http://localhost:1903/OpenId/Authenticate
这似乎很好。为什么EP需要向realm发起请求?我原以为它应该只是在完成处理后将断言发送到 returnTo 。如果我手动将 Realm 设置为
http://localhost:1903/OpenId/Authenticate
然后
relyingParty.GetResponse()
返回空值。
http://localhost:1903
) 时进行重定向 - 我应该在那里运行什么代码来拦截 DNOA EP 请求?
http://localhost:1903
)?鉴于现有的体系结构,很难删除重定向 - 我尝试将领域设置为基本 OpenId Controller (
http://localhost:1903/OpenId
),手动测试确实生成了 XRDS 文档。但是,应用程序似乎卡住了,EP 日志显示以下错误:
2012-10-10 15:17:46,000 (GMT-4) [24] ERROR DotNetOpenAuth.OpenId - Attribute Exchange extension did not provide any aliases in the if_available or required lists.
最佳答案
你的 RP 有非常可疑的奇怪代码。虽然 return_to 和领域具有相同的 Uri 权限是正常的(实际上是必需的),但事实上,您将用户提供的标识符作为第一个参数传递给 OpenIdRelyingParty.CreateRequest
与您的依赖方具有相同的主机和端口非常奇怪。通常,您传入的标识符是提供商托管的 URL。现在,我不知道端口 3314 是您的 RP 还是您的 OP,但无论如何,您的 RP 代码中的这些端口号之一看起来是错误的。
其次,对用户标识符的发现因空引用异常而失败(根据您的 RP 日志的 v2)。这将阻止登录请求到达您的提供者。您的 Provider 被调用但 OpenID 请求不存在这一事实表明 http://localhost:3314/OpenId/
实际上是您的 OP 端点(读取 OpenID 请求的 OpenID 提供程序的操作方法的 URL)。那将是不合适的。您应该传递给您的 OpenIdRelyingParty.CreateRequest
的 URL同样,方法的第一个参数应该是用户的 OpenID URL——而不是 OP 端点。查看 OpenIdProviderMvc 示例的用户 Controller ,了解如何设置用户 OpenID URL 的示例。然后使用该 URL 作为 CreateRequest
的第一个参数我认为你会很好。
第三,一旦您的 Provider 收到非空请求,您就不能总是将其强制转换为 IAuthenticationRequest
.并非所有 OpenID 消息都是身份验证消息。有些是底层 OpenID 协议(protocol)的一部分。如果您查看 OpenIdProviderMvc 示例的 OpenID Controller ,您应该注意到有条件转换来处理不同的消息类型。您应该在 Controller 中进行类似的消息处理。
由于您要使用 SSO 方案,因此您的 Controller 的显着差异大概是:
IAuthenticationRequest.Realm
属性反对包含在您的 SSO 网络环中的 RP 白名单,并且仅在领域符合条件时提供肯定断言。这可以减轻攻击,一旦您的服务器设置好,任何人都可以设置一个站点,该站点悄悄地使用您的 OpenID 提供程序来识别随机 Internet 网站的用户(如果他们属于您的组织),这会侵犯他们的隐私。 关于c# - OpenIdProvider.GetRequest() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517083/
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
这个问题在这里已经有了答案: Can we subtract NULL pointers? (4 个回答) 关闭 2 个月前。 是否定义了NULL - NULL? (char *)NULL - (ch
是否有推荐的方法(根据 .net Framework 指南)检查 null,例如: if (value == null) {//code1} else {//code2} 或 if (value !=
我正在尝试将值插入数据库,但出现这样的错误任何人都可以告诉我为什么该值为空,如下所示: An exception occurred while executing 'INSERT INTO perso
这个问题在这里已经有了答案: String concatenation with a null seems to nullify the entire string - is that desire
您好,我正在 Android 联系人搜索模块中工作。我正在查询下方运行。 cur = context.getContentResolver().query(ContactsContract.Data.
下面的 SQL 表定义说明了从我的 MYSQL 数据库创建表的语句之一,该数据库是由我公司的前开发人员开发的。 DROP TABLE IF EXISTS `classifieds`.`category
我主要有应用程序开发背景。在编程语言中 variable == null或 variable != null有效。 当涉及到 SQL 时,以下查询不会给出任何语法错误,但也不会返回正确的结果。 sel
我在尝试检查某些元素是否为 NULL 时遇到段错误或不。任何人都可以帮忙吗? void addEdge(int i, int j) { if (i >= 0 && j > 0)
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
下面查询的关系代数表达式是什么?我找不到“Is Null”的表达式。 SELECT reader.name FROM reader LEFT JOIN book_borrow ON reader.ca
我正在尝试使用三元运算符来检查值是否为 null 并返回一个表达式或另一个。将此合并到 LINQ 表达式时,我遇到的是 LINQ 表达式的 Transact-SQL 转换试图执行“column = n
我在给定的代码中看到了以下行: select(0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, &timeout); http://linux
var re = /null/g; re.test('null null'); //> true re.test('null null'); //> true re.test('null null')
这个问题在这里已经有了答案: 关闭 13 年前。 我今天避开了一场关于数据库中空值的激烈辩论。 我的观点是 null 是未指定值的极好指示符。团队中有意见的其他每个人都认为零和空字符串是可行的方法。
由于此错误,我无法在模拟器中运行我的应用: Error:null value in entry: streamOutputFolder=null 或 gradle - Error:null value
我正在尝试在 Android 应用程序中创建电影数据库,但它返回错误。知道这意味着什么吗? public Cursor returnData() { return db.query(TABLE
我一直在检查浏览器中的日期函数以及运行时间 new Date (null, null, null); 在开发工具控制台中,它给出了有效的日期 Chrome v 61 回归 Sun Dec 31 189
为什么 NA==NULL 会导致 logical (0) 而不是 FALSE? 为什么 NULL==NULL 会导致 logical(0) 而不是 TRUE? 最佳答案 NULL 是一个“零长度”对象
我是一名优秀的程序员,十分优秀!