我想使用OAuth JWT令牌进行授权。由于某种原因(osgi容器)我不能使用spring-oauth-security。
在spring-oauth-security的自述文件中,我找到了一个引用:
商店的JSON Web令牌(JWT)版本将有关授权的所有数据编码到令牌本身(因此根本没有后端存储,这是一个重要优势)。
https://github.com/spring-projects/spring-security-oauth/blob/master/docs/oauth2.md
我绝对不会抓住"根本没有后端商店"。 jwt中有两种情况:
验证者密钥是共享密钥,可通过/ token_key URL获取。 问题1:我应该在服务器上为每个注册用户存储共享密钥。为什么"根本没有后端存储"?
/ token_key返回公钥(不带主体)。
问题2:但为什么我们只为所有用户使用一个公钥?它无法为rsa中的同一个公钥生成多个私钥,不是吗? RSA中只允许使用一对私钥 - 公钥。
我不了解流程以及为什么"根本没有后端商店"。
答案 0 :(得分:2)
每个用户不使用不同的密钥,但每个身份提供商使用不同的密钥。
身份提供商使用密钥签署JWT,您可以在没有后端查找的情况下为每个用户验证它。对于JWT验证,您只需要一个与身份提供者相关的密钥 - 即使您将其存储在某个数据库中,也可以获取一次并缓存它。对于不对称密钥,OIDC甚至定义了一个URL来获取用于签名的公钥。
密钥用于信任身份提供者,因此隐含地信任它提供的身份。
这是关于这个主题的非常好的文章: https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/