在 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的主要内容,如果未能解决你的问题,请参考以下文章
试图将两个runat = server表单放在一个web表单asp.net中