这是一个背景故事,随时可以跳到下面的问题。
我们有一些暴露给外部世界的Web应用程序(而不仅仅是我们内部业务网络),这些应用程序使用HTML5进行离线功能。我们还仅为Windows身份验证配置了IIS(没有外部人员使用我们的应用程序),因此我们直接针对我们的AD发出了挑战。随着Chrome for iOS的最新更新,它打破了NTLM身份验证(而不是提示使用凭据,它只显示了401未经授权的异常页面),因此我们开始寻找替代解决方案。
我们认为我们可以利用当前的外部ADFS / O365访问,因此所有面向外部的应用程序(不仅仅是Web应用程序)的用户体验都是相同的。
我们最终将OWIN添加到我们的WebForms应用程序以使用ADFS身份验证,它的工作原理是您可以看到重定向到我们的外部登录页面然后再返回到Web应用程序。但是,还有一个问题。为了实现这一点,我们必须在IIS中禁用Windows身份验证并启用匿名身份验证。另外,在<system.web>
中的Web.Config中,我们添加了<authorization><deny users="?" /></authorization>
问题
由于我们的应用程序使用HTML5并且可以脱机使用,因此我们还使用Web API来处理从客户端设备到中央系统的数据推送。当我们转向我们的“SSO类型”解决方案时,Web API中的POST方法开始崩溃。结果是HttpContext.Current.User.Identity.Name
停止工作。
当用户返回网络并同步他们的数据时,如何获得当前经过身份验证的[已登录]用户?我甚至不确定这里最好的方法是什么,我已经尝试过来自SO和谷歌的一些不同的建议,但似乎都没有。如何使用联合服务使用Owin获取Web API中的当前用户?