[英]OAuth authentication with DropWizard
我有一组基于DropWizard构建的RESTful Web服务。 目前,我正在使用BasicAuth对用户进行身份验证以使用API。
这涉及到拥有另一个带有用户/密码详细信息的数据库的开销。 我正在寻找基于令牌的身份验证,并发现DropWizard开箱即用支持Oauth2。
任何人都可以帮我解决这个基于Oauth2的身份验证的示例实现吗? 那么实现的架构是什么?
任何帮助,将不胜感激。
这个问题已经存在了一段时间,但是对于未来的访问者,我在这里放了一篇文章,解释了如何使用自定义注释做到这一点:
基本上我的想法是使用我们自己的逻辑(在这种情况下使用JWT)实现我们自己的注释,但帖子还指出了Dropwizard需要哪些自定义设置。
尽管这个问题已经有四年了,但是我无法找到一个完整的应用程序示例,该应用程序使用您自己的验证机制插入dropwizard Oauth2库。
因此,为了将来从谷歌搜索发现这篇文章的人的利益, 这是一个在最新的dropwizard版本1.3.8上运行的完整工作示例
祝好运!
Dropwizard GitHub repo中有一个OAuth2身份验证示例。
下面是最新版本的Dropwizard(v0.7.1)的示例:
...
public OAuthFactory(final Authenticator<String, T> authenticator,
final String realm,
final Class<T> generatedClass) {
super(authenticator);
this.required = false;
this.realm = realm;
this.generatedClass = generatedClass;
}
private OAuthFactory(final boolean required,
final Authenticator<String, T> authenticator,
final String realm,
final Class<T> generatedClass) {
super(authenticator);
this.required = required;
this.realm = realm;
this.generatedClass = generatedClass;
}
@Override
public AuthFactory<String, T> clone(boolean required) {
return new OAuthFactory<>(required, authenticator(), this.realm, this.generatedClass);
}
public T provide() {
try {
final String header = request.getHeader(HttpHeaders.AUTHORIZATION);
if (header != null) {
final int space = header.indexOf(' ');
if (space > 0) {
final String method = header.substring(0, space);
if (PREFIX.equalsIgnoreCase(method)) {
final String credentials = header.substring(space + 1);
final Optional<T> result = authenticator().authenticate(credentials);
if (result.isPresent()) {
return result.get();
}
}
}
}
} catch (AuthenticationException e) {
LOGGER.warn("Error authenticating credentials", e);
throw new InternalServerErrorException();
}
if (required) {
throw new WebApplicationException(Response.status(Response.Status.UNAUTHORIZED)
.header(HttpHeaders.WWW_AUTHENTICATE, String.format(CHALLENGE_FORMAT, realm))
.type(MediaType.TEXT_PLAIN_TYPE)
.entity("Credentials are required to access this resource.")
.build());
}
return null;
}
@Override
public Class<T> getGeneratedClass() {
return generatedClass;
}
...
完整的代码, 在这里 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.