我正在构建以下内容:
用户凭据(电子邮件/密码)可以通过单页应用程序创建,并存储在后端。不需要与外部提供商进行交互,例如Facebook Login,,但将来可能有必要。
一旦用户使用其凭据进行身份验证,单页面应用程序就应通过其RESTful API与后端进行交互。
我很难理解如何基于凭据设置用户身份验证和授权,其方式既安全又兼容单页应用程序的约束。
我找到了有关 OAuth 2.0 和 JSON网络代币的信息。我无法想象我应该使用这些技术实现我的最终目标的方式,无论它们是应该一起工作还是独立工作,而且我很难意识到每个技术带来的陷阱。
您是否可以提供所需步骤和组件的演练,以便为具有自定义后端的单页面应用程序构建成功的身份验证/授权机制,如果可能,还可以涵盖以下主题:
答案 0 :(得分: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。
希望它有所帮助。