如何在没有登录表单的情况下将摘要身份验证与 asp.net web api 和 angular js 一起使用?
Posted
技术标签:
【中文标题】如何在没有登录表单的情况下将摘要身份验证与 asp.net web api 和 angular js 一起使用?【英文标题】:How can I use digest auth with asp.net web api and angular js without a login form? 【发布时间】:2015-03-19 19:01:51 【问题描述】:我正在构建一个单页应用程序,该应用程序仅供用户通过 WPF 应用程序使用。永远不要通过传统浏览器公开。
基本上,用户已经通过客户端 WPF 应用程序进行了身份验证。
WPF 应用利用现有的 Web API 来使用数据并对用户进行身份验证。
登录 WPF 应用程序后,用户可以导航到将通过 WPF 浏览器控件或类似方式加载我的单页应用程序的部分。
SPA 将使用 AngularJS 和与 wpf 应用程序相同的 Web API。
我想在初始页面加载时对 SPA 部分的用户进行身份验证,并保护从 SPA 发出的所有 API 请求。由于 angularjs 应用程序需要访问 API,我需要一种方法将用户凭据获取到应用程序的 Web 部分。
我可以在初始页面加载时使用摘要身份验证并以某种方式将这些凭据存储在页面上以供 angularjs 使用吗?如果是这样,在 asp.net 中设置它的过程是什么?
【问题讨论】:
您的问题的答案是“是的,您可以”。但是,我认为您可能想重新提出您的问题,因为我确定您实际上是想问如何完成它,而不是如果可能的话。 为了让你开始,你有一个令牌端点;您可以将要设置的客户端值存储在令牌中,一旦检索到令牌,您就可以从令牌中获取值并将它们存储在 html 本地存储中。 谢谢@Claies 我认为首先我需要保护从 IIS 提供的初始 HTML 页面,对吗?此页面需要摘要凭据来验证用户(从 WPF 应用程序发送),然后我可以在页面上存储一个令牌并使用 angular + 令牌来访问 API。我需要有关在初始页面上配置身份验证的指导 【参考方案1】:我不熟悉 Windows 开发,但我想我有类似的设置:
-
首先您验证您的用户。
然后您在服务器端生成 AngularJS 应用程序的主页,并在 ng-init 中包含一个包含您之前身份验证结果的对象。我的例子(服务器端生成的语法是 ejs):
<body ng-init=' user = id : "<%= user._id %>",
email : "<%= user.local.email %>",
name : "<%= user.local.first_name + " " + user.local.last_name %>",
password : "<%= user.local.password %>",
apiKey : "<%= user.local.apiKey %>",
;'>
在 angularJS 应用程序的其余部分中,您将能够使用 $rootScope.user.apiKey 或 $scope.user.apiKey
我希望这会有所帮助。 祝你的代码好运。 G
【讨论】:
【参考方案2】:使用 ObjectForScripting 通过 WPF 应用程序(可以进行经过身份验证的调用)从 javascript 向服务器发出请求。此函数允许托管的 JS 调用 .NET 代码。
【讨论】:
以上是关于如何在没有登录表单的情况下将摘要身份验证与 asp.net web api 和 angular js 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
使用 ASP.NET 表单身份验证时如何获取当前登录用户的用户 ID?
如何在有和没有 ssh 身份验证的情况下将 Git 与两个不同的存储库一起使用?
使用 ASP.NET 表单身份验证,如何让图像出现在登录屏幕上?