我应该使用 oauth2 jwt 授权将什么存储到数据库中?
What should I store into db with oauth2 jwt authorization?
我想使用 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
我绝对不听"no back end store at all"。 jwt中有两种情况:
- 对称密钥或共享密钥 (HMAC);
验证者密钥是一个共享秘密,由 /token_key URL 提供。
问题 1:我应该为每个注册用户在服务器上存储共享机密。为什么 "no back end store at all"?
- 非对称密钥 (RS/ES);
/token_key returns public 密钥(无主体)。
问题 2:但是为什么我们只对所有用户使用一个 public 密钥?它无法为 rsa 中的同一个 public 密钥生成多个私钥,不是吗? RSA 中只允许一对私钥 - public 密钥。
我不明白流程和为什么 "no back end store at all"。
您不是为每个用户使用不同的密钥,而是为每个身份提供者使用不同的密钥。
身份提供者使用密钥对 JWT 进行签名,您无需后端查找即可为每个用户验证它。对于 JWT 验证,您只需要一个与身份提供者相关的密钥——即使您将它存储在某个数据库中,您也可以获取一次并缓存它。对于非对称密钥,OIDC 甚至定义了一个 URL 来获取用于签名的 public 个密钥。
密钥用于信任身份提供者,因此隐式地信任它提供的身份。
这篇关于该主题的文章非常好:
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
我想使用 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
我绝对不听"no back end store at all"。 jwt中有两种情况:
- 对称密钥或共享密钥 (HMAC);
验证者密钥是一个共享秘密,由 /token_key URL 提供。 问题 1:我应该为每个注册用户在服务器上存储共享机密。为什么 "no back end store at all"?
- 非对称密钥 (RS/ES);
/token_key returns public 密钥(无主体)。
问题 2:但是为什么我们只对所有用户使用一个 public 密钥?它无法为 rsa 中的同一个 public 密钥生成多个私钥,不是吗? RSA 中只允许一对私钥 - public 密钥。
我不明白流程和为什么 "no back end store at all"。
您不是为每个用户使用不同的密钥,而是为每个身份提供者使用不同的密钥。
身份提供者使用密钥对 JWT 进行签名,您无需后端查找即可为每个用户验证它。对于 JWT 验证,您只需要一个与身份提供者相关的密钥——即使您将它存储在某个数据库中,您也可以获取一次并缓存它。对于非对称密钥,OIDC 甚至定义了一个 URL 来获取用于签名的 public 个密钥。
密钥用于信任身份提供者,因此隐式地信任它提供的身份。
这篇关于该主题的文章非常好: https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/