jjzjj

c# - 无法验证 OWIN OpenIdConnect 中间件 IDX10311 nonce

coder 2024-05-21 原文

我有一个将 OWIN 中间件用于 OpenIdConnect 的应用程序。 startup.cs 文件使用 app.UseOpenIdConnectAuthentication 的标准实现。 cookie 已设置到浏览器,但它会出错:

IDX10311: RequireNonce is 'true' (default) but validationContext.Nonce is null. A nonce cannot be validated. If you don't need to check the nonce, set OpenIdConnectProtocolValidator.RequireNonce to 'false'.

我发现当像我对大多数调试项目那样运行 fiddler 时,会发生这种行为。返回错误,但如果我返回该站点,一切正常并且我的用户已通过身份验证。有没有人在运行 fiddler 时看到这种行为?

使用 fiddler :

  • OpenIdConnect 中的 SecurityTokenValidated 通知执行了两次。
  • 第二次通过后抛出 IDX10311 错误
  • 浏览器包含有效的 cookie,返回页面我可以查看有效的 User.Identity 数据。

在没有 fiddler 的情况下运行:

  • SecurityTokenValidated 在 OpenIdConnect 中执行一次
  • 没有抛出错误,继续为认证后重定向 Uri 加载 Controller 操作
  • Cookie 也有效且 User.Identity 数据正确。

想法?我可以在不运行 fiddler 的情况下绕过它,但是在调试时最好也运行 fiddler 来检查流量。

最佳答案

也许是这个原因?

你好,我想我找到了这个问题的根本原因。

我正在总结我的发现:

  1. 问题出在 OpenIdConnect.nonce.OpenIdConnect cookie 中

  2. 一旦 OpenID 中间件启动身份验证 session ,就会从应用程序(我们称之为“ID 客户端”)设置此 cookie

  3. 身份验证完成后,cookie 应立即从浏览器发送回“ID 客户端”。我的假设是,从 ID 客户端的角度来看,需要此 cookie 进行双重检查(即我是否真的启动了 OpenID Connect 授权流程?)

  4. 我的很多困惑是由“Nonce”一词引起的,它既用在这个 cookie 中,也用在来自 ID 服务器的 OpenID Connect 流中。

  5. 在我的例子中,异常是由丢失的 cookie(不是 ID 服务器的随机数)引起的,只是因为浏览器没有将它发送回“ID 客户端”

因此,在我的例子中,主要根是:浏览器未将 OpenIdConnect.nonce.OpenIdConnect cookie 发送回 ID 客户端。在某些情况下(即 Chrome、Firefox 和 Edge)cookie 被正确发送,而在其他情况下(IE11、Safari)则不是。

经过大量研究,我发现问题出在浏览器上定义的Cookie限制策略上。在我的例子中,“ID 客户端”嵌入在 <iframe> 中。 .这导致“ID 客户端”被视为“第三方客户端”,因为用户没有直接在主窗口中导航到该 URL。因为这是第三方,所以对于某些浏览器,它的 cookie 必须被阻止。 实际上,通过设置“阻止第三方 cookie”,在 Chrome 上可以获得相同的效果。

所以,我必须得出结论:

a) 如果 iframe 是必须的(就像我的情况一样,因为“ID 客户端”是必须在我们的主要平台应用程序的图形内容中运行的应用程序),我认为唯一的解决方案是拦截错误,并且用页面处理它,要求用户启用第三方 cookie。

b) 如果 iframe 不是必须的,它应该足以在新窗口中打开“ID 客户端”。

希望这对某人有所帮助,因为我疯了!

马可

关于c# - 无法验证 OWIN OpenIdConnect 中间件 IDX10311 nonce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412570/

有关c# - 无法验证 OWIN OpenIdConnect 中间件 IDX10311 nonce的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  6. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  7. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  8. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  9. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  10. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

随机推荐