代码之家  ›  专栏  ›  技术社区  ›  harmeet

哪种Oauth流适合使用javascript SPA进行令牌身份验证

  •  2
  • harmeet  · 技术社区  · 9 年前

    -我有一个javascipt的SPA应用程序
    -webapi服务.net -同一project.net中的令牌服务

    问题1

    Spa应用程序使用grant_type密码向令牌端点发出ajax请求。作为回报,它会回来 保存在localstorage中的令牌,稍后用于验证webapi。 1.这是SPA身份验证的正确方法吗? 2.密码授予类型是否正确?或者我需要使用其他流来确保安全。在它编写的oauth文档中,不应该使用它。 3我担心令牌的安全性,因为它只能被复制和粘贴。如何保护它?

    问题2 带有令牌服务的自定义SSO

    现在我有了另一个使用相同架构的应用程序。像应用程序A和B。使用相同架构。我想 使用应用程序A的令牌服务向应用程序B发出令牌以登录应用程序B。

    A发给应用程序B的令牌可以解密,我可以创建用户身份。现在我们如何登录应用程序B 因为它也遵循基于令牌的方法。所以在这里,我应该通过创建一个新的本地accesstoken登录到应用程序B 使用应用程序A发布的令牌中的信息自行发布。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Kévin Chalet    9 年前
    1. 这是SPA身份验证的正确方法吗?2.密码授予类型是否正确?或者我需要使用其他流来确保安全。在它编写的oauth文档中,不应该使用它。

    在开发自己的应用程序时,使用资源所有者密码凭据授权是很好的,但在与第三方客户机应用程序一起使用OAuth2时,这就违背了OAuth2的整体目的,因为这是唯一一个 用户密码直接向客户端应用程序公开 (这违反了最低特权原则)。

    您可以考虑改用授权代码或隐式流,但它不一定“更安全”,而且人们通常认为它是一种过火的做法,因为他们寻找一种简单的“令牌替代方案”来代替密码身份验证。

    3我担心令牌的安全性,因为它只能被复制和粘贴。如何保护它?

    由于您正在开发JS应用程序,用户可以直接访问持有者令牌。对此你无能为力(它类似于cookie的安全级别,用户自己可以轻松复制并移动到不同的环境)。

    为了保护访问/刷新令牌免受远程攻击者的攻击,您所能做的就是确保您的JS应用程序不受XSS漏洞的影响,这将允许窃取令牌或代表用户进行恶意API调用。


    因此,在这里,我应该通过创建一个新的本地accesstoken来登录到应用程序B,该token是使用应用程序a发出的令牌中的信息自行发出的。

    SSO实际上无法处理非交互式流,如资源所有者密码凭据授予,因为用户没有登录到此流中的授权服务器(即在创建 grant_type=password 请求)。

    您应该考虑设置一个中央授权/身份验证服务器,支持交互式流,如授权代码或隐式流,以支持此场景。