在我们的公司中,我们试着开始使用oauth2.0,我们的Azure租户在后端使用vue.js作为前端和vert.x服务。
我的想法是我想
如果我用我们从Azure获得的jwt调用vert.x服务,就会得到一个运行时异常:“没有足够多的片段”。JWT有3个与预期类似的部分。我就是这样创建AzureADAuth的:
OAuth2ClientOptions opts = new OAuth2ClientOptions();
opts.setFlow(OAuth2FlowType.AUTH_JWT);
OAuth2Auth auth = AzureADAuth.create(vertx,"{{application-id}}","{{secret}}","{{tenant-id}}", opts);在我的处理程序中,我试图验证:
HttpServerRequest request = context.request();
String authorization = request.headers().get(HttpHeaders.AUTHORIZATION);
String[] parts = authorization.split(" ");
scheme = parts[0];
token = parts[1];
JsonObject creds = new JsonObject();
creds.put("token_type", scheme);
creds.put("access_token", token);
authProvider.authenticate(creds,userAsyncResult -> {
if(userAsyncResult.succeeded()){
context.next();
} else {
context.fail(401);
}
});因此,在我发现需要添加一个jwk之后,我尝试使用AzureADAuth.discover方法。
我的代码如下所示:
OAuth2ClientOptions optsDisc = new OAuth2ClientOptions();
optsDisc.setSite("https://login.windows.net/{tenant-id}");
optsDisc.setClientID("{application-id}");
AzureADAuth.discover(vertx, optsDisc,res -> {
if (res.succeeded()) {
if(log.isDebugEnabled()) {
log.debug("Discover succeeded.");
}
} else {
log.error("Discover failed.");
}
});运行此代码将导致“发现失败”,其中包含以下消息:
java.lang.RuntimeException: java.security.cert.CertificateException:无法解析证书: java.io.IOException:空输入
因此,我的问题是如何用vert.x验证我的用户?
发布于 2019-01-08 07:00:02
很明显我在这里遇到了版本冲突。我将所有依赖项设置为3.6.2,现在它可以工作了。我花了一点时间才弄明白如何处理这个发现,并且在发现之后我不需要用AzureAdAuth创建一个新的AzureAdAuth对象。
供日后参考:
OAuth2ClientOptions optsDisc = new OAuth2ClientOptions();
opts.setClientID("{client-id}");
AzureADAuth.discover(vertx, opts,res -> {
if (res.succeeded()) {
//use res.result() to access the through discovery already created OAuth2Auth Object
log.debug("Discover succeeded.");
} else {
log.error("Discover failed.");
}
})https://stackoverflow.com/questions/54012340
复制相似问题