[英]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.