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

公開メンバ関数

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

限定公開メンバ関数

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(BearerTokenRequestAuthenticator.class)
 
String tokenString
 
AccessToken token
 
String surrogate
 
AuthChallenge challenge
 
KeycloakDeployment deployment
 

詳解

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ BearerTokenRequestAuthenticator()

org.keycloak.adapters.BearerTokenRequestAuthenticator.BearerTokenRequestAuthenticator ( KeycloakDeployment  deployment)
inline
44  {
45  this.deployment = deployment;
46  }
KeycloakDeployment deployment
Definition: BearerTokenRequestAuthenticator.java:42

関数詳解

◆ authenticate()

AuthOutcome org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticate ( HttpFacade  exchange)
inline
64  {
65  List<String> authHeaders = exchange.getRequest().getHeaders("Authorization");
66  if (authHeaders == null || authHeaders.size() == 0) {
67  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.NO_BEARER_TOKEN, null, null);
68  return AuthOutcome.NOT_ATTEMPTED;
69  }
70 
71  tokenString = null;
72  for (String authHeader : authHeaders) {
73  String[] split = authHeader.trim().split("\\s+");
74  if (split == null || split.length != 2) continue;
75  if (!split[0].equalsIgnoreCase("Bearer")) continue;
76  tokenString = split[1];
77  }
78 
79  if (tokenString == null) {
80  challenge = challengeResponse(exchange, OIDCAuthenticationError.Reason.NO_BEARER_TOKEN, null, null);
81  return AuthOutcome.NOT_ATTEMPTED;
82  }
83 
84  return (authenticateToken(exchange, tokenString));
85  }
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
AuthOutcome authenticateToken(HttpFacade exchange, String tokenString)
Definition: BearerTokenRequestAuthenticator.java:87

◆ authenticateToken()

AuthOutcome org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticateToken ( HttpFacade  exchange,
String  tokenString 
)
inlineprotected
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 
)
inlineprotected
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 ( )
inlineprotected
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 ( )
inline
48  {
49  return challenge;
50  }
AuthChallenge challenge
Definition: BearerTokenRequestAuthenticator.java:41

◆ getSurrogate()

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

◆ getToken()

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

◆ getTokenString()

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

メンバ詳解

◆ challenge

AuthChallenge org.keycloak.adapters.BearerTokenRequestAuthenticator.challenge
protected

◆ deployment

KeycloakDeployment org.keycloak.adapters.BearerTokenRequestAuthenticator.deployment
protected

◆ log

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

◆ surrogate

String org.keycloak.adapters.BearerTokenRequestAuthenticator.surrogate
protected

◆ token

AccessToken org.keycloak.adapters.BearerTokenRequestAuthenticator.token
protected

◆ tokenString

String org.keycloak.adapters.BearerTokenRequestAuthenticator.tokenString
protected

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