上下文
我有多个服务,例如:
- 用户(LDAP或Active Directory等)
- 计费
- 规划
- 等等...
- 身份验证
我需要使用OAuth2.0连接到我的微服务,对于初始阶段,使用标准的登录/密码(我使用自己的数据,而不是使用第三方服务器)。
问题
根据这些图片:
步骤1
步骤2
我如何处理access_token控制或授权控制,以在authmicroservice之外的其他服务中使用?
上下文
我有多个服务,例如:
我需要使用OAuth2.0连接到我的微服务,对于初始阶段,使用标准的登录/密码(我使用自己的数据,而不是使用第三方服务器)。
问题
根据这些图片:
步骤1
步骤2
我如何处理access_token控制或授权控制,以在authmicroservice之外的其他服务中使用?
我们的激活器中有一个微服务认证流程的教程和描述,它是用Scala编写的 — http://www.typesafe.com/activator/template/reactive-microservices (来源: https://github.com/theiterators/reactive-microservices)
get("projects/" / Segment) { projectName =>
getHeader("Auth-Token") { authToken =>
Redis.get("auth:token:#{authToken}").map { userJson =>
if(userJson("projects").include(projectName)) {
...processSth...
Ok
} else {
Unauthorized
}
}
}
}
身份验证过程中,您可以使用Spring Data JPA通过方法名称转换来查询MySQL数据库。
另外,您可以使用Spring Security的BCrypt算法对密码进行哈希处理。
链接: Spring数据JPA:https://spring.io/projects/spring-data-jpa Spring安全性:https://spring.io/projects/spring-authorization-server
您可以使用此方法
有关详细实现,请参阅此博客: https://www.tatvasoft.com/blog/microservices-implementation-java/
根据您如何构建微服务的方式,您还可以利用组合。
由于您已经拥有一个身份验证服务,因此您可以在账单服务中使用它来在处理请求之前检查请求的真实性。
例如,如果您正在使用像StdLib这样的平台(我们在内部使用它):
// Billing
const lib = require('lib');
module.exports = function(params, callback) {
lib.user.isAuthenticated(params, function(err, user) {
if (err) return callback(err);
// Do stuff with user, process billing
});
};
如果你总是在函数之间使用HTTP通信的话,这可能不是一个好主意(因为这会使你的请求增加大约200-300毫秒)。但是StdLib在同一区域内加载了几个服务,你可以像调用函数一样访问它们,从而解决了这个问题(至少在我们目前看到的情况下)。