我想在 Android 应用程序中使用 aerogear 和使用 Keycloak 的服务器对用户进行身份验证(使用他的用户名和密码)。我一直做不到,请帮助我。
我目前可以在没有 aerogear 的情况下对用户进行身份验证,但我想使用这个库,因为它可以帮助我在需要时刷新令牌。我像这样(但来自 android)对向服务器发出 POST 调用的用户进行身份验证:
curl -X POST http://127.0.0.1:8080/auth/realms/example/protocol/openid-connect/token
-H "Content-Type: application/x-www-form-urlencoded" -d "username=auser" -d 'password=apassword' -d 'grant_type=password'
-d 'client_id=clientId' -d 'client_secret=secret'
所以我掌握的信息是:
- 认证网址,
ie http://127.0.0.1:8080/auth/realms/example/protocol/openid-connect/token
- username,用户的用户名
- 密码,用户的密码
- Keycloak 服务器的 client_id 和 client_secret
我对 Aerogear 的尝试是这样的:
private void authz() {
try {
AuthzModule authzModule = AuthorizationManager.config("KeyCloakAuthz", OAuth2AuthorizationConfiguration.class)
.setBaseURL(new URL("http://127.0.0.1:8080/"))
.setAuthzEndpoint("/realms/example/protocol/openid-connect/auth")
.setAccessTokenEndpoint("/realms/example/protocol/openid-connect/token")
.setAccountId("keycloak-token")
.setClientId("clientId")
.setClientSecret("secret")
.setRedirectURL("http://oauth2callback")
.setScopes(Arrays.asList("openid"))
.addAdditionalAuthorizationParam((Pair.create("grant_type", "password")))
.addAdditionalAuthorizationParam((Pair.create("username", "aUserName")))
.addAdditionalAuthorizationParam((Pair.create("password", "aPassword")))
.asModule();
authzModule.requestAccess(this, new Callback<String>() {
@Override
public void onSuccess(String o) {
Log.d("TOKEN ", o);
}
@Override
public void onFailure(Exception e) {
System.err.println("Error!!");
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
});
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
然而,这并没有做任何事情。我不明白的是:
- 如何在 Aerogear 中使用 Keycloak 指定我正在执行的操作和 OpenID Connect?
- 如何以及在哪里可以发送用户名和密码?
- 如何指定grant_type?(如果我不包括这个,我到服务器的 HTTP POST 不起作用,所以这很重要)
任何帮助将不胜感激