keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
org.keycloak.adapters.BasicAuthRequestAuthenticator クラス
org.keycloak.adapters.BasicAuthRequestAuthenticator の継承関係図
Inheritance graph
org.keycloak.adapters.BasicAuthRequestAuthenticator 連携図
Collaboration graph

公開メンバ関数

 BasicAuthRequestAuthenticator (KeycloakDeployment deployment)
 
AuthOutcome authenticate (HttpFacade exchange)
 
AuthChallenge getChallenge ()
 
String getTokenString ()
 
AccessToken getToken ()
 
String getSurrogate ()
 

限定公開メンバ関数

AccessTokenResponse getToken (String username, String password) throws Exception
 
AuthOutcome authenticateToken (HttpFacade exchange, String tokenString)
 
AuthChallenge clientCertChallenge ()
 
AuthChallenge challengeResponse (HttpFacade facade, final OIDCAuthenticationError.Reason reason, final String error, final String description)
 

限定公開変数類

Logger log = Logger.getLogger(BasicAuthRequestAuthenticator.class)
 
String tokenString
 
AccessToken token
 
String surrogate
 
AuthChallenge challenge
 
KeycloakDeployment deployment
 

詳解

Basic auth request authenticator.

構築子と解体子

◆ BasicAuthRequestAuthenticator()

org.keycloak.adapters.BasicAuthRequestAuthenticator.BasicAuthRequestAuthenticator ( KeycloakDeployment  deployment)
inline
47  {
48  super(deployment);
49  }
KeycloakDeployment deployment
Definition: BearerTokenRequestAuthenticator.java:42

関数詳解

◆ authenticate()

AuthOutcome org.keycloak.adapters.BasicAuthRequestAuthenticator.authenticate ( HttpFacade  exchange)
inline
51  {
52  List<String> authHeaders = exchange.getRequest().getHeaders("Authorization");
53  if (authHeaders == null || authHeaders.size() == 0) {
54  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.NO_AUTHORIZATION_HEADER, null, null);
55  return AuthOutcome.NOT_ATTEMPTED;
56  }
57 
58  tokenString = null;
59  for (String authHeader : authHeaders) {
60  String[] split = authHeader.trim().split("\\s+");
61  if (split == null || split.length != 2) continue;
62  if (!split[0].equalsIgnoreCase("Basic")) continue;
63  tokenString = split[1];
64  }
65 
66  if (tokenString == null) {
67  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, null, null);
68  return AuthOutcome.NOT_ATTEMPTED;
69  }
70 
71  AccessTokenResponse atr=null;
72  try {
73  String userpw=new String(Base64.decode(tokenString));
74  int seperatorIndex = userpw.indexOf(":");
75  String user = userpw.substring(0, seperatorIndex);
76  String pw = userpw.substring(seperatorIndex + 1);
77  atr = getToken(user, pw);
78  tokenString = atr.getToken();
79  } catch (Exception e) {
80  log.debug("Failed to obtain token", e);
81  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "no_token", e.getMessage());
82  return AuthOutcome.FAILED;
83  }
84 
85  return authenticateToken(exchange, atr.getToken());
86  }
AuthChallenge challengeResponse(HttpFacade facade, final OIDCAuthenticationError.Reason reason, final String error, final String description)
Definition: BearerTokenRequestAuthenticator.java:159
AuthChallenge challenge
Definition: BearerTokenRequestAuthenticator.java:41
String tokenString
Definition: BearerTokenRequestAuthenticator.java:38
AccessToken getToken()
Definition: BearerTokenRequestAuthenticator.java:56
AuthOutcome authenticateToken(HttpFacade exchange, String tokenString)
Definition: BearerTokenRequestAuthenticator.java:87
Logger log
Definition: BasicAuthRequestAuthenticator.java:45

◆ authenticateToken()

AuthOutcome org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticateToken ( HttpFacade  exchange,
String  tokenString 
)
inlineprotectedinherited
87  {
88  log.debug("Verifying access_token");
89  if (log.isTraceEnabled()) {
90  try {
91  JWSInput jwsInput = new JWSInput(tokenString);
92  String wireString = jwsInput.getWireString();
93  log.tracef("\taccess_token: %s", wireString.substring(0, wireString.lastIndexOf(".")) + ".signature");
94  } catch (JWSInputException e) {
95  log.errorf(e, "Failed to parse access_token: %s", tokenString);
96  }
97  }
98  try {
99  token = AdapterRSATokenVerifier.verifyToken(tokenString, deployment);
100  } catch (VerificationException e) {
101  log.error("Failed to verify token", e);
102  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.INVALID_TOKEN, "invalid_token", e.getMessage());
103  return AuthOutcome.FAILED;
104  }
106  log.error("Stale token");
107  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.STALE_TOKEN, "invalid_token", "Stale token");
108  return AuthOutcome.FAILED;
109  }
110  boolean verifyCaller = false;
113  } else {
114  verifyCaller = token.isVerifyCaller();
115  }
116  surrogate = null;
117  if (verifyCaller) {
118  if (token.getTrustedCertificates() == null || token.getTrustedCertificates().size() == 0) {
119  log.warn("No trusted certificates in token");
121  return AuthOutcome.FAILED;
122  }
123 
124  // for now, we just make sure Undertow did two-way SSL
125  // assume JBoss Web verifies the client cert
126  X509Certificate[] chain = new X509Certificate[0];
127  try {
128  chain = exchange.getCertificateChain();
129  } catch (Exception ignore) {
130 
131  }
132  if (chain == null || chain.length == 0) {
133  log.warn("No certificates provided by undertow to verify the caller");
135  return AuthOutcome.FAILED;
136  }
137  surrogate = chain[0].getSubjectDN().getName();
138  }
139  log.debug("successful authorized");
140  return AuthOutcome.AUTHENTICATED;
141  }
AuthChallenge challengeResponse(HttpFacade facade, final OIDCAuthenticationError.Reason reason, final String error, final String description)
Definition: BearerTokenRequestAuthenticator.java:159
AuthChallenge clientCertChallenge()
Definition: BearerTokenRequestAuthenticator.java:143
String getResourceName()
Definition: KeycloakDeployment.java:107
AuthChallenge challenge
Definition: BearerTokenRequestAuthenticator.java:41
String tokenString
Definition: BearerTokenRequestAuthenticator.java:38
KeycloakDeployment deployment
Definition: BearerTokenRequestAuthenticator.java:42
Set< String > getTrustedCertificates()
Definition: AccessToken.java:237
boolean isVerifyCaller()
Definition: AccessToken.java:153
AccessToken token
Definition: BearerTokenRequestAuthenticator.java:39
boolean isUseResourceRoleMappings()
Definition: KeycloakDeployment.java:307
int getNotBefore()
Definition: KeycloakDeployment.java:363
String surrogate
Definition: BearerTokenRequestAuthenticator.java:40
Logger log
Definition: BearerTokenRequestAuthenticator.java:37
int getIssuedAt()
Definition: JsonWebToken.java:114

◆ challengeResponse()

AuthChallenge org.keycloak.adapters.BearerTokenRequestAuthenticator.challengeResponse ( HttpFacade  facade,
final OIDCAuthenticationError.Reason  reason,
final String  error,
final String  description 
)
inlineprotectedinherited
159  {
160  StringBuilder header = new StringBuilder("Bearer realm=\"");
161  header.append(deployment.getRealm()).append("\"");
162  if (error != null) {
163  header.append(", error=\"").append(error).append("\"");
164  }
165  if (description != null) {
166  header.append(", error_description=\"").append(description).append("\"");
167  }
168  final String challenge = header.toString();
169  return new AuthChallenge() {
170  @Override
171  public int getResponseCode() {
172  return 401;
173  }
174 
175  @Override
176  public boolean challenge(HttpFacade facade) {
177  if (deployment.getPolicyEnforcer() != null) {
178  deployment.getPolicyEnforcer().enforce(OIDCHttpFacade.class.cast(facade));
179  return true;
180  }
181  OIDCAuthenticationError error = new OIDCAuthenticationError(reason, description);
182  facade.getRequest().setError(error);
183  facade.getResponse().addHeader("WWW-Authenticate", challenge);
185  facade.getResponse().setStatus(401);
186  }
187  else {
188  facade.getResponse().sendError(401);
189  }
190  return true;
191  }
192  };
193  }
String getRealm()
Definition: KeycloakDeployment.java:111
AuthorizationContext enforce(OIDCHttpFacade facade)
Definition: PolicyEnforcer.java:91
AuthChallenge challenge
Definition: BearerTokenRequestAuthenticator.java:41
PolicyEnforcer getPolicyEnforcer()
Definition: KeycloakDeployment.java:444
KeycloakDeployment deployment
Definition: BearerTokenRequestAuthenticator.java:42
boolean isDelegateBearerErrorResponseSending()
Definition: KeycloakDeployment.java:473

◆ clientCertChallenge()

AuthChallenge org.keycloak.adapters.BearerTokenRequestAuthenticator.clientCertChallenge ( )
inlineprotectedinherited
143  {
144  return new AuthChallenge() {
145  @Override
146  public int getResponseCode() {
147  return 0;
148  }
149 
150  @Override
151  public boolean challenge(HttpFacade exchange) {
152  // do the same thing as client cert auth
153  return false;
154  }
155  };
156  }
AuthChallenge challenge
Definition: BearerTokenRequestAuthenticator.java:41

◆ getChallenge()

AuthChallenge org.keycloak.adapters.BearerTokenRequestAuthenticator.getChallenge ( )
inlineinherited
48  {
49  return challenge;
50  }
AuthChallenge challenge
Definition: BearerTokenRequestAuthenticator.java:41

◆ getSurrogate()

String org.keycloak.adapters.BearerTokenRequestAuthenticator.getSurrogate ( )
inlineinherited
60  {
61  return surrogate;
62  }
String surrogate
Definition: BearerTokenRequestAuthenticator.java:40

◆ getToken() [1/2]

AccessToken org.keycloak.adapters.BearerTokenRequestAuthenticator.getToken ( )
inlineinherited
56  {
57  return token;
58  }
AccessToken token
Definition: BearerTokenRequestAuthenticator.java:39

◆ getToken() [2/2]

AccessTokenResponse org.keycloak.adapters.BasicAuthRequestAuthenticator.getToken ( String  username,
String  password 
) throws Exception
inlineprotected
88  {
89  AccessTokenResponse tokenResponse=null;
90  HttpClient client = deployment.getClient();
91 
92  HttpPost post = new HttpPost(
93  KeycloakUriBuilder.fromUri(deployment.getAuthServerBaseUrl())
94  .path(ServiceUrlConstants.TOKEN_PATH).build(deployment.getRealm()));
95  java.util.List <NameValuePair> formparams = new java.util.ArrayList <NameValuePair>();
96  formparams.add(new BasicNameValuePair(OAuth2Constants.GRANT_TYPE, OAuth2Constants.PASSWORD));
97  formparams.add(new BasicNameValuePair("username", username));
98  formparams.add(new BasicNameValuePair("password", password));
99 
100  ClientCredentialsProviderUtils.setClientCredentials(deployment, post, formparams);
101 
102  UrlEncodedFormEntity form = new UrlEncodedFormEntity(formparams, "UTF-8");
103  post.setEntity(form);
104 
105  HttpResponse response = client.execute(post);
106  int status = response.getStatusLine().getStatusCode();
107  HttpEntity entity = response.getEntity();
108  if (status != 200) {
109  EntityUtils.consumeQuietly(entity);
110  throw new java.io.IOException("Bad status: " + status);
111  }
112  if (entity == null) {
113  throw new java.io.IOException("No Entity");
114  }
115  java.io.InputStream is = entity.getContent();
116  try {
117  tokenResponse = JsonSerialization.readValue(is, AccessTokenResponse.class);
118  } finally {
119  try {
120  is.close();
121  } catch (java.io.IOException ignored) { }
122  }
123 
124  return (tokenResponse);
125  }
String getRealm()
Definition: KeycloakDeployment.java:111
HttpClient getClient()
Definition: KeycloakDeployment.java:259
KeycloakDeployment deployment
Definition: BearerTokenRequestAuthenticator.java:42
String getAuthServerBaseUrl()
Definition: KeycloakDeployment.java:127

◆ getTokenString()

String org.keycloak.adapters.BearerTokenRequestAuthenticator.getTokenString ( )
inlineinherited
52  {
53  return tokenString;
54  }
String tokenString
Definition: BearerTokenRequestAuthenticator.java:38

メンバ詳解

◆ challenge

AuthChallenge org.keycloak.adapters.BearerTokenRequestAuthenticator.challenge
protectedinherited

◆ deployment

KeycloakDeployment org.keycloak.adapters.BearerTokenRequestAuthenticator.deployment
protectedinherited

◆ log

Logger org.keycloak.adapters.BasicAuthRequestAuthenticator.log = Logger.getLogger(BasicAuthRequestAuthenticator.class)
protected

◆ surrogate

String org.keycloak.adapters.BearerTokenRequestAuthenticator.surrogate
protectedinherited

◆ token

AccessToken org.keycloak.adapters.BearerTokenRequestAuthenticator.token
protectedinherited

◆ tokenString

String org.keycloak.adapters.BearerTokenRequestAuthenticator.tokenString
protectedinherited

このクラス詳解は次のファイルから抽出されました: