背景
Servicecomb-mesher 是 Apache servicecomb 的微服务网格项目。Mesher 实际上在应用层作为一个代理,拦截并代替业务服务发起和接收请求,为服务添加治理功能。Mesher同时可以也可以用作微服务的网关,在网关模式下,Mesher需要提供为用户实现的认证功能提供框架能力。现在比较流行的一种认证模式是:用户不用再注册账号,直接利用已有的Google,Github, QQ等账号登录,mesher作为网关应当实现第三方登录功能。提高开发者的开发效率,和用户的使用体验。
目前oauth2授权框架使用最广泛,上述过程的实质是:mesher使用oauth2协议获得第三方应用访问其用户信息(我们关注的是唯一信息,可能是用户名,也可能是OpenID、UserID等)的授权,获取该用户信息后,用该用户信息实现认证。
开发者如何使用Mesher OAuth2 认证能力
以通过Github账号认证为例:
-
注册你的应用,访问这个链接,填写相应的信息,其中callback_url填写为
http(s)://yourdomain.com/oauth2_callback
。获取ClientID,和ClientSecret。 -
配置Mesher,在proxy/handler/oauth2 目录oauth2_handler文件中,添加如下代码,完成对mesher的配置:
Use(&OAuth2{
GrantType: "authorization_code",
UseConfig: &oauth2.Config{
ClientID: "", // (required, string) your client_ID
ClientSecret: "", // (required, string) your client_Secret
Scopes: []string{
""}, // (optional, string) scope specifies requested permissions
RedirectURL: "", // (required, string) URL to redirect users going through the OAuth2 flow
Endpoint: oauth2.Endpoint{
// (required, string) your auth server endpoint
AuthURL: "https://github.com/login/oauth/authorize",
TokenURL: "https://github.com/login/oauth/access_token",
},
},
Authenticate: func(userinfo string, req *http.Request) error {
return nil
},
})
- 添加认证鉴权功能的实现。当用户登录githu