- 我在javascipt中有一个SPA应用程序 - 一个webapi服务.net - 同一项目中的令牌服务.net
问题1
Spa应用程序使用grant_type密码向令牌端点发出ajax请求。作为回报,它会回来 保存在localstorage中的令牌,稍后用于验证webapi。 1.这是SPA认证的正确方法吗? 2.密码授予类型是否正确?或者我需要使用其他一些流程来确保安全。在它编写的oauth文档中,不应该使用它。 3我担心令牌的安全性,因为它可以被复制和粘贴。如何保护它?
问题2 使用令牌服务的自定义SSO
现在我有另一个使用相同架构的应用程序。与应用程序A和B类似。使用相同的结构。我想要 使用应用程序A的令牌服务向应用程序B发出令牌以登录到应用程序B.
A向应用程序B发出的令牌可以被解密,我可以创建用户身份。现在我们如何登录到应用程序B 因为它也遵循基于令牌的方法。所以我应该通过创建一个新的本地accessstoken登录到应用程序B. 使用来自应用程序A发出的令牌的信息发布自己。
答案 0 :(得分:2)
- 这是SPA身份验证的正确方法吗? 2.密码授予类型是否正确?或者我需要使用其他一些流程来确保安全。在编写的oauth文档中,不应该使用它。
醇>
使用资源所有者密码凭据授权在开发您自己的应用程序时很好,但在将第二方客户端应用程序与OAuth2一起使用时会失败,因为它是用户密码的唯一流程直接暴露给客户端应用程序(这违反了最小权限原则)。
您可以考虑使用授权代码或隐式流程,但它不一定更安全"并且通常被人们认为是一种矫枉过正的人,他们正在寻找一种简单的替代品#34;密码验证。
3我担心令牌的安全性,因为它可以被复制和粘贴。如何保护它?
由于您正在开发JS应用程序,因此用户可以直接访问承载令牌。你无能为力(它类似于cookie的安全级别,可以很容易地被用户自己复制并移动到不同的环境中)。
为了保护访问/刷新令牌免受远程攻击者攻击,您所能做的就是确保您的JS应用程序不会受到XSS攻击的影响,这样就可以代表用户窃取它们或进行恶意API调用。
因此,我应该通过使用应用程序A发出的令牌中的信息创建一个新的本地accessstoken来登录应用程序B.
SSO无法真正使用非交互式流程,例如资源所有者密码凭据授权,因为用户未在此流程中登录授权服务器(即,在创建{{{}时不会创建会话cookie 1}}请求)。
您应该考虑设置一个支持交互流的中央授权/身份验证服务器,如授权代码或隐式流,以支持此方案。