1
我已經部署截至目前兩個彈簧引導微服務:在微服務中共享用戶ID的最佳做法是什麼?
- 驗證網關
- 業務邏輯RESTful服務。
成功登錄後,Auth Gateway發出一個jwt令牌。對於下一個請求,它會在將請求重定向到業務邏輯之前驗證/授權jwt令牌。
從Auth網關分享用戶相關信息到其他服務的最佳方式是什麼?使用SpringSecurity和Spring Boot編寫Auth Gateway
。
我已經部署截至目前兩個彈簧引導微服務:在微服務中共享用戶ID的最佳做法是什麼?
成功登錄後,Auth Gateway發出一個jwt令牌。對於下一個請求,它會在將請求重定向到業務邏輯之前驗證/授權jwt令牌。
從Auth網關分享用戶相關信息到其他服務的最佳方式是什麼?使用SpringSecurity和Spring Boot編寫Auth Gateway
。
在JWT令牌中編碼所有必要的詳細信息(用戶ID等)。
您發出的驗證網關和智威湯遜訪問令牌,令牌具有三個部分:頭,索賠和簽名
將所有必要的信息到索賠部分。見the example
@Component
public class JwtTokenFactory {
private final JwtSettings settings;
@Autowired
public JwtTokenFactory(JwtSettings settings) {
this.settings = settings;
}
/**
* Factory method for issuing new JWT Tokens.
*
* @param username
* @param roles
* @return
*/
public AccessJwtToken createAccessJwtToken(UserContext userContext) {
if (StringUtils.isBlank(userContext.getUsername()))
throw new IllegalArgumentException("Cannot create JWT Token without username");
if (userContext.getAuthorities() == null || userContext.getAuthorities().isEmpty())
throw new IllegalArgumentException("User doesn't have any privileges");
Claims claims = Jwts.claims().setSubject(userContext.getUsername());
claims.put("scopes", userContext.getAuthorities().stream().map(s -> s.toString()).collect(Collectors.toList()));
DateTime currentTime = new DateTime();
String token = Jwts.builder()
.setClaims(claims)
.setIssuer(settings.getTokenIssuer())
.setIssuedAt(currentTime.toDate())
.setExpiration(currentTime.plusMinutes(settings.getTokenExpirationTime()).toDate())
.signWith(SignatureAlgorithm.HS512, settings.getTokenSigningKey())
.compact();
return new AccessJwtToken(token, claims);
}
編碼在JWT所有必要的信息(用戶ID等),令牌 – StanislavL
@StanislavL你的意思是,更新後登錄的用戶ID等的JWT令牌? –