当前位置: 首页 > 面试题库 >

使用AngularJS进行身份验证,使用REST Api WS进行会话管理和安全性问题

夏侯玄天
2023-03-14
问题内容

我开始使用angularJS开发一个Web应用程序,但不确定是否所有内容(客户端和服务器端)都受到正确保护。安全性基于单个登录页面,如果可以对凭据进行检查,则我的服务器将发回具有自定义时间有效性的唯一令牌。所有其他REST
api均可通过此令牌访问。该应用程序(客户端)浏览到我的入口点,例如:https
:
//www.example.com/home.html用户插入凭据并收到唯一令牌。该唯一令牌是使用AES或其他安全技术存储在服务器数据库中的,不是以明文格式存储的。

从现在开始,我的AngluarJS应用将使用此令牌对所有公开的REST Api进行身份验证。

我正在考虑将令牌临时存储在自定义的http cookie中;基本上,当服务器验证凭据时,它将发回新的Cookie Ex。

app-token : AIXOLQRYIlWTXOLQRYI3XOLQXOLQRYIRYIFD0T

Cookie上设置了安全和HTTP
Only标志。Http协议直接管理新的cookie并将其存储。连续的请求将向cookie提供带有新参数的cookie,而无需对其进行管理并使用javascript进行存储;在每次请求时,服务器都会使令牌无效并生成一个新令牌,然后将其发送回客户端->防止使用单个令牌进行重放攻击

当客户端从任何REST Api 收到HTTP状态 401未经授权的 响应时,角度控制器将清除所有cookie,并将用户重定向到登录页面。

我是否应该考虑其他方面?将令牌存储在新的cookie或localStorage中更好吗?关于如何生成独特的强令牌的任何技巧?

编辑(改进):

  • 我决定使用HMAC-SHA256作为会话令牌生成器,有效期为20分钟。我生成一个随机的32字节GUID,附加一个时间戳,并通过提供40字节的密钥来计算HASH-SHA256。由于令牌的有效性非常低,因此几乎不可能获得冲突。
  • Cookie将具有域和路径属性以提高安全性。
  • 不允许多次登录。

问题答案:

如果通过https与服务器通信,则重放攻击没有问题。

我的建议是利用服务器的安全技术。例如,JavaEE具有开箱即用的登录机制,基于声明性的基于角色的资源保护(您的REST端点)等。这些都由一组cookie进行管理,您不必关心存储和存储。到期。检查一下您的服务器/框架已经给您带来了什么。

如果您打算将API面向更广泛的受众群体(而不是专门针对所服务的基于浏览器的UI)或其他类型的客户端(例如,移动应用程序),请考虑采用OAuth。

Angular具有以下安全功能(弹出时会添加更多功能):

CSRF / XSRF攻击

Angular支持开箱即用的CSRF保护机制。查看$http
文档。需要服务器端支持。

内容安全政策

Angular具有表达式评估模式,可与启用CSP时强制执行的更严格的JavaScript运行时兼容。查看ng- csp 文档。

严格的上下文转义

使用Angular的新$sce功能(1.2+)可以使您的UI抵御XSS攻击等。它不太方便,但更安全。在此处查看文档。



 类似资料:
  • cookie设置了secure和HTTP Only标志。Http协议直接管理和存储新的cookie。连续的请求将显示带有新参数的cookie,而不需要管理它并用JavaScript存储它;在每次请求时,server都会使令牌失效并生成一个新令牌并将其发回客户端-->用单个令牌防止重放攻击。 当客户机从任何REST Api收到HTTP Status401未经授权的响应时,angular控制器将清除所

  • 我正在尝试通过连接到LDAP使用Spring Security进行我的第一个演示。 我使用的Sping版本是:3.1.0.RELEASE 以下是我的security-integration.xml: 然而,每当我部署我的战争时,我都会遇到这个例外: HTTP状态500 - 类型异常报告 消息 描述服务器遇到一个内部错误(),该错误阻止它完成此请求。 例外情况 javax.servlet。Servl

  • 这是一个很好的OAuth2用例吗?还是OAuth2仅用于授予第三方应用程序对用户数据的访问权限? 如果OAuth2不是可行的方法:如何将用户令牌安全地传递给浏览器,并防止中间人攻击?用户令牌应该在一定时间后过期吗?

  • 我需要一些有关Azure API管理服务的帮助。 目前,我们有一个单页应用程序,它使用Azure上托管的两个后端服务(WebApi.NETCore)。为了对用户进行身份验证和授权,我们使用IdentityServer(也作为服务托管在Azure上)SubscriptionService。在这里,IdSrv对用户进行身份验证,并定义webapp可以访问哪些api。如果用户拥有给定API的权限,Sub

  • 问题内容: 我需要使用PostForm方法将代理与auth一起使用。如果我使用类似(简体)的内容: 我可以轻松做到,并且效果很好。但是现在,我正在编辑第三方程序包,并尝试将代理添加到现有代码中: 在我看来,它是行不通的,而且失败了。在此示例中,没有身份验证的代理可以正常工作。有人知道吗,在这种情况下我可以在auth中使用代理吗? 问题答案: 您正在尝试向响应中添加标头,这不是您发送到服务器的内容,

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢