在 Web 表单项目中使用 ASP.NET Identity 2.0

Posted

技术标签:

【中文标题】在 Web 表单项目中使用 ASP.NET Identity 2.0【英文标题】:Using ASP.NET Identity 2.0 in web forms project 【发布时间】:2014-05-20 21:02:35 【问题描述】:

我正在升级旧 Web 表单项目的用户管理页面以使用新的 Identity 2.0。这意味着在 Web 表单解决方案中引入 MVC 页面,但到目前为止这似乎不是一个大问题。大多数功能都可以正常工作,除非我尝试将外部身份验证提供程序(Google、FCBK)添加到已登录的用户。我正在使用 Identity 2.0 示例应用程序,我的问题发生在 Identity 2.0 示例应用程序中的 /manage/linklogin 操作中。

在这里,应该通过将 HTTP 401 设置为当前响应来挑战外部身份验证提供程序(比如说 Google),从而导致浏览器重定向:

Location: https://www.google.com/accounts/o8/ud?openid.ns=[edited out...]

但是,发生在我身上的是我只被重定向到本地登录页面:

Location: /Account/Login?ReturnUrl=%2fManageAccount%2fLinkLogin

请注意,当我尝试使用 Google 帐户注册(即用户未登录,未经过身份验证)时,会调用相同的代码 - 所以它是 不是我会在 Startup.Auth.cs 中错误地设置 app.UseGoogleAuthentication() 的问题。

我怀疑响应管道中的“某些东西”在 Owin.Security.Google 身份验证中间件启动并设置正确的重定向位置之前捕获了 Microsoft.Owin.Security.AuthenticationManager.Challenge() 方法设置的 StatusCode 401,尽管我找不到那个“东西”是什么。

任何人已经成功地将 Identity 2.0 导入到 Web 表单项目中吗?

关于我的问题的更多信息可以在这里找到:Identity2.0 Codeplex discussion

【问题讨论】:

【参考方案1】:

请参阅此示例以了解显示 Identity 2.0 功能的 ASP.NET Web 表单https://aspnet.codeplex.com/SourceControl/latest#Samples/Identity/Webforms.Samples/

您还应该确保注册中间件的顺序正确。例如。 Cookie 应先于 Google

【讨论】:

Pranav - 我的所有代码设置与示例应用程序中的顺序完全相同。我看到的唯一区别是 HttpContext(以及最近的 OwinContext)的 User 属性——在示例应用程序中,User 是 System.Security.Claims.ClaimsPrincipal 的类型,而在我的应用程序中,User 是 System.Web.Security.RolePrincipal。我已经从我的 web.config 中删除了所有与 Forms Auth 相关的代码,但仍然找不到设置 User 对象类型的位置。【参考方案2】:

是的,这是一个挑战。你对它的观察是正确的 行为。下面的配置信息为我解决了这个问题。 排除回调路径的最底部配置标签导致 它开始按预期运行。

 <system.webServer>
    <modules>
      <remove name="FormsAuthentication"/>
    </modules>    
  </system.webServer>


  <system.web>


    <authentication mode="None"/>
    <authorization>
      <deny users="?" />
    </authorization>
  </system.web>

  <location path="login.aspx">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

<!-- the callback path has to be open to anonymous so that owin can do it's redirect magic-->
  <location path="signin-google">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

【讨论】:

以上是关于在 Web 表单项目中使用 ASP.NET Identity 2.0的主要内容,如果未能解决你的问题,请参考以下文章

asp.net web表单json返回结果

试图将两个runat = server表单放在一个web表单asp.net中

在 Asp.net 中通过 Word doc 自动填写 Web 表单

使用ajax调用asp.net web表单代码

Web 表单中的 ASP.NET Web Api

如果未使用 C# 登录 ASP.NET Web 表单,则将用户重定向到登录