![](/img/trans.png)
[英]How to implement Microservices with Authentication Server(OAuth2,0 and JWT), Zuul and Eureka services?
[英]Implementing authentication and authorization using Zuul Proxy, Oauth2 on REST Microservices
我正在嘗試使用 Spring Boot 在工作流中實現上述架構。
我想確保我遵循正確的工作流程。
我想知道是否有任何解決方案實現了類似的用於保護微服務 API 的解決方案。
我有以下困惑:
我知道這是一個有點冗長的問題。 但是我還沒有找到上述架構的合適解決方案。
不幸的是,我沒有完整的答案,只有一些部分:
一旦 JWT 令牌可用於 zuul 代理,那么每個微服務都可以通過配置其資源服務器來授權請求,例如
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests().anyRequest().access("#oauth2.hasScope('microserviceA.read')").and()
.csrf().disable()
.httpBasic().disable();
}
范圍可以由帶有數據庫的 oauth 微服務管理 - 基於客戶端憑據,它將獲取范圍信息並編碼為 JWT 令牌。
我目前不知道的是 - 如何讓 zuul 代理使用“Web 客戶端”憑據來通過 oauth 對其進行授權 - 我不想硬編碼 zuul 代理憑據,因為這樣 Web 客戶端憑據就贏了不會被利用。
我剛剛發布了關於這個主題的類似問題: Authorizing requests through spring gateway with zool via oauth server
更新:我發現文章描述了幾乎這種配置(沒有尤里卡,但從我的經驗來看,它並沒有增加太多復雜性): https : //www.baeldung.com/spring-security-zuul-oauth-jwt ,那里是帶有源代碼的github項目。 不幸的是,源代碼沒有被完善,因為它被作者用於他的商業課程。 但是我已經設法從他的示例工作集構建。
總結:在所描述的架構中,每個資源服務器(微服務 A、B、..)從請求客戶端接收由 zuul 代理/網關轉發的 JWT 令牌。 令牌在請求標頭中轉發。 如果沒有提供有效的令牌,則網關會將請求重定向到授權頁面。 此外,每個資源服務器都可以使用 oauth 服務檢查令牌,如果需要,可以像我上面寫的那樣進行范圍檢查。
我一直在努力解決基於 Spring Cloud 解決方案的微服務架構的相同安全設計問題。 我只發現這篇文章對它有所了解: https : //developer.okta.com/blog/2018/02/13/secure-spring-microservices-with-oauth
但它與 Okta sso 服務提供商有關,而不是其他 oauth2 服務器(如 keycloak)的通用解決方案。
我還看到了一些關於如何使用 oauth2 服務器保護網關和微服務的解決方案,如下所示: https : //github.com/jgrandja/oauth2login-gateway
但它沒有考慮到 Web 客戶端。
我不確定您是否能夠解決這個問題,我可以看到這還沒有得到解答,但是有一種方法可以將所有信息從 JWT 傳遞到所有下游微服務。 編寫您自己的 ZuulAuthenticationFilter,然后創建以下方法
private void addClaimHeaders(RequestContext context, String token) {
try {
Map<String, Claim> claims = jwtTokenVerifier.getAllClaims(token);
claims.forEach((key, claim) -> {
context.addZuulRequestHeader("x-user-info-"+key, String.valueOf(claim.as(Object.class)));
});
}catch(Exception ex) {
log.error("Error in setting zuul header : "+ex.getMessage(), ex);
}
}
這樣,您將在每個微服務的標頭中從 JWT 獲取信息,以“x-user-info-”開頭的標頭將包含您的 JWT 詳細信息
在以下鏈接中有上述架構的實現: https : //www.baeldung.com/spring-security-zuul-oauth-jwt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.