WIF:LocalSTS未进行身份验证

时间:2013-03-10 16:21:49

标签: asp.net-mvc-4 wif claims-based-identity

我是WIF的新手并且开始玩它有点我用MVC4应用尝试了最简单的“f5体验”;根据我发现的教程,遗憾的是大部分都是指.net 4.5之前的版本,我应该创建一个MVC应用程序,使用身份和访问工具配置它,然后点击f5启动并运行本地STS。然而,我可能遗漏了一些明显的东西,因为当我尝试访问受限制的页面时,我总是回到主页。

以下是我所做的,您可以轻松地使用这些步骤重新解决问题(使用WIF SDK在Win8中使用VS2012;确保以管理员权限启动VS):

  1. 创建一个新的ASP.NET MVC4 Internet应用程序。将其端口设置为7777(仅为了商品而选择大多数代码示例中使用的端口号)。

  2. 更新所有NuGet包(这是可选的)。

  3. 右键单击解决方案,选择identity并访问并设置IP = local STS,然后单击OK。然后重新打开标识和访问弹出窗口,选择生成控制器,然后单击“确定”。

  4. 将[Authorize]属性添加到Home控制器的About操作中。

  5. 点击F5并点击“关于”链接。正如预期的那样,登录视图出现,提示我登录:唯一的选择当然是localSTS。单击它时,我将返回主页,不会进行身份验证。我可以重复这个过程,但没有任何变化,所以我永远无法访问受保护的关于页面。

  6. localSTS锚点的基础链接是:

    http://localhost:14743/wsFederationSTS/Issue?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z
    

    AFAIK,其参数看起来不错。

    如果我检查网络流量,我看不到任何相关项目(如果我理解的话,我希望响应为当前会话设置一些cookie,代表IClaimsPrincipal)。

    (顺便说一句,通过查看web.config,我可以看到模块WSFederationAuthenticationModule是从 System.Identity.Services 引用的,在配置身份和访问后,它不包含在解决方案中;我想这是工具中的一个错误。无论如何,我添加了对它的引用,但没有任何改变。)

    更新

    谢谢你的回复!如果我检查流量,这里是相关的GET / POST。我没有饼干。我尝试重新创建整个测试解决方案,甚至跳过上面的步骤#2以保持最小化,但没有任何改变。

    至于你的建议#2,我试图添加全局的asax:

            FederatedAuthentication.WSFederationAuthenticationModule.SecurityTokenValidated
                += (sender, e) => FederatedAuthentication.SessionAuthenticationModule.IsReferenceMode = true;
    

    但是此代码执行时SessionAuthenticationModule为null,因此抛出相应的异常。我找不到关于此的最新代码示例或文章,但WIF似乎是一个非常有前途的技术;我希望像我这样的安全新手很容易;我的主要目的是将它应用于提供MVC控制器和WebApi控制器的站点,广泛的消费者(JS代码,移动应用程序,WinRT应用程序,网站页面本身......)。有什么建议吗?

    (1) a GET which gets 307, temporary redirect
    
    GET /wsFederationSTS/Issue?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z HTTP/1.1
    Host: localhost:14743
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
    Referer: http://localhost:7777/HrdAuthentication/Login?ReturnUrl=%2fHome%2fAbout
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Cookie: 
    
    (2) GET with signin request:
    GET /wsFederationSTS/Issue/?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z HTTP/1.1
    Host: localhost:14743
    Connection: keep-alive
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
    Referer: http://localhost:7777/HrdAuthentication/Login?ReturnUrl=%2fHome%2fAbout
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Cookie: 
    
    (3) a POST to the homepage: the respone is of course the homepage content; no cookies set.
    POST / HTTP/1.1
    Host: localhost:7777
    Connection: keep-alive
    Content-Length: 7063
    Cache-Control: max-age=0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Origin: http://localhost:14743
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
    Content-Type: application/x-www-form-urlencoded
    Referer: http://localhost:14743/wsFederationSTS/Issue/?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a7777%2f&wctx=rm%3d0%26id%3d664ff3c2-95b1-40b3-b538-a8357233ea7e%26ru%3dhttp%253a%252f%252flocalhost%253a7777%252f&wct=2013-03-10T13%3a39%3a32Z
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: en-US,en;q=0.8
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Cookie: 
    

    工作变体

    我找到了让它工作的方法,也许这对其他人有用:如果您按照上述过程而不从本地IIS服务器更改为VS开发服务器,它似乎正在工作,我仍然被重定向到主页(我想知道为什么:),但作为一个经过身份验证的用户;此时,我可以再次单击“关于”链接以有效地进入该页面。

1 个答案:

答案 0 :(得分:0)

我重现你的步骤,一切正常。 Chrome调试器显示您必须执行两个步骤:

GET  http://localhost:12263/wsFederationSTS/Issue/?wa=wsignin1.0&wtrealm=http%3a%2f%2flocalhost%3a54306%2f&wctx=rm%3d0%26id%3dc6e46b99-417b-49b6-96a0-40efcead898f%26ru%3dhttp%253a%252f%252flocalhost%253a54306%252f&wct=2013-03-10T18%3a14%3a19Z
POST http://localhost:54306/ with wa:wsignin1.0 and wresult:trust:RequestSecurityTokenResponseCollection

POST的结果是Set-Cookie名为FedAuth和FedAuth1。由于cookie大小限制,Cookie被拆分。

请在调试器中检查。

P.S。一旦我看到相同的行为 - cookie没有正常设置。问题在于cookie大小并由switching to ReferenceMode解决。不要忘记在Application_Start中注册它:

FederatedAuthentication.WSFederationAuthenticationModule.SessionSecurityTokenCreated 
+= this.WSFederationAuthenticationModule_SessionSecurityTokenCreated;