2016-08-20 50 views
5

我建立如下:安全验证/在一个单页的应用程序授权

  • 一个JavaScript单页应用;
  • 一个Node.js后端暴露了一个RESTful API,它将存储用户数据;

用户凭证(电子邮件/密码)可以通过单页应用程序创建并存储在后端。没有必要与外部提供商进行交互,如Facebook Login,,但未来可能需要。

一旦用户使用其凭证进行身份验证,单页应用程序应通过其RESTful API与后端进行交互。


我竭力要了解如何建立基于证书的用户认证和授权,以一种既安全,又具有单页应用程序的约束兼容。

我发现有关OAuth 2.0的信息JSON Web令牌。我无法想象我应该如何使用这些技术来实现我的最终目标,无论它们应该一起工作还是独立工作,并且我正在努力意识到每个工作带来的缺陷。


你能提供的,以建立一个成功的认证/授权机制,单页应用程序使用自定义后端所需的步骤和部件步行通过,如果可能包括以下内容还有:

  • 与JWT或其他方法相比,使用OAuth 2.0的好处/缺点;
  • 使用Cookie而不是以不同方式(例如LocalStorage)存储标记和安全隐含;

回答

0

您可以在没有JWT的情况下使用没有Oauth2和Oauth2的JWT,也可以一起使用它们。

请记住,OAuth2管理授权而不是身份验证。 OAuth2不介意如何验证您的用户。为了处理认证,tou可以看看OpenId Connect,这是Oauth2之上的一层。 OpenId Connect将向您的应用程序发送一个包含有关用户身份信息的签名id_token。

一旦您通过OpenId Connect验证了您的用户,您可以联系您的OAuth服务器以获取access_token(无论是否为JWT)。该令牌将用于联系您的API。对于SPA应用,推荐使用Implicit Grant flow

对于JWT,它用于id_token(来自OpenId Connect),可用于access_token(OAuth2)。对于access_token,您的令牌可以通过引用(推荐用于SPA)或价值。

通过引用您的令牌对于客户端是不透明的(例如guid)。通过值,您的令牌可以被解析,并且包含的​​数据可以被客户端读取。

对于使用的组件,我个人使用RedHat的Keycloak

希望它有帮助。