我有一組基於DropWizard的RESTful Web服務。目前我正在使用BasicAuth來驗證用戶使用API。使用DropWizard進行OAuth身份驗證
這涉及開銷另一個DB與用戶/密碼的詳細信息。我正在研究基於令牌的身份驗證,並發現DropWizard支持Oauth2開箱即用。
任何人都可以幫助我的基於Oauth2的身份驗證的示例實現嗎?那麼架構如何實現呢?
任何幫助,將不勝感激。
我有一組基於DropWizard的RESTful Web服務。目前我正在使用BasicAuth來驗證用戶使用API。使用DropWizard進行OAuth身份驗證
這涉及開銷另一個DB與用戶/密碼的詳細信息。我正在研究基於令牌的身份驗證,並發現DropWizard支持Oauth2開箱即用。
任何人都可以幫助我的基於Oauth2的身份驗證的示例實現嗎?那麼架構如何實現呢?
任何幫助,將不勝感激。
在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;
}
...
完整代碼,here!
謝謝,但它根本沒有幫助。 – h4ck3d 2014-09-30 18:50:44
這個問題已經有一段時間了,但是對於未來的遊人,我把這裏的一篇文章,解釋如何使用自定義的註釋做得很好:
基本上這個想法是用我們自己的邏輯來實現我們自己的註釋(在這個例子中是使用JWT),但是這篇文章也指出了Dropwizard需要的自定義設置。
這不是一個真正的Oauth2支持我會說。如果你檢查這個例子,它只是給你一個字符串,並希望你自己驗證它。因此,要麼實現自己的基於令牌的身份驗證,要麼將其他身份驗證庫集成到其中。 – Natan 2014-11-25 14:08:52
此處有任何更新?有人知道,如何在驗證器中注入範圍? – heaphach 2015-04-13 11:19:06