keycloak
公開メンバ関数 | 静的公開変数類 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider クラス
org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider の継承関係図
Inheritance graph
org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider 連携図
Collaboration graph

公開メンバ関数

String getId ()
 
void init (KeycloakDeployment deployment, Object config)
 
void setClientCredentials (KeycloakDeployment deployment, Map< String, String > requestHeaders, Map< String, String > formParams)
 
void setClientSecret (String clientSecretString)
 
String createSignedRequestToken (String clientId, String realmInfoUrl)
 

静的公開変数類

static final String PROVIDER_ID = "secret-jwt"
 

非公開メンバ関数

JsonWebToken createRequestToken (String clientId, String realmInfoUrl)
 

非公開変数類

SecretKey clientSecret
 

静的非公開変数類

static final Logger logger = Logger.getLogger(JWTClientSecretCredentialsProvider.class)
 

詳解

Client authentication based on JWT signed by client secret instead of private key . See specs for more details.

著者
Takashi Norimatsu

関数詳解

◆ createRequestToken()

JsonWebToken org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.createRequestToken ( String  clientId,
String  realmInfoUrl 
)
inlineprivate
79  {
80  // According to <a href="http://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication">OIDC's client authentication spec</a>,
81  // JWT claims is the same as one by private_key_jwt
82 
83  JsonWebToken reqToken = new JsonWebToken();
84  reqToken.id(AdapterUtils.generateId());
85  reqToken.issuer(clientId);
86  reqToken.subject(clientId);
87  reqToken.audience(realmInfoUrl);
88 
89  int now = Time.currentTime();
90  reqToken.issuedAt(now);
91  // the same as in KEYCLOAK-2986, JWTClientCredentialsProvider's timeout field
92  reqToken.expiration(now + 10);
93  reqToken.notBefore(now);
94  return reqToken;
95  }

◆ createSignedRequestToken()

String org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.createSignedRequestToken ( String  clientId,
String  realmInfoUrl 
)
inline
71  {
72  JsonWebToken jwt = createRequestToken(clientId, realmInfoUrl);
73  // JOSE header {"alg":"HS256","typ" : "JWT"} no need "kid" due to using only one registered client secret.
74  // Use "HmacSHA256" consulting <a href="https://docs.oracle.com/javase/jp/8/docs/api/javax/crypto/Mac.html">java8 api</a>.
75  // because it must be implemented in every java platform.
76  return new JWSBuilder().jsonContent(jwt).hmac256(clientSecret);
77  }
SecretKey clientSecret
Definition: JWTClientSecretCredentialsProvider.java:30
JsonWebToken createRequestToken(String clientId, String realmInfoUrl)
Definition: JWTClientSecretCredentialsProvider.java:79

◆ getId()

String org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.getId ( )
inline

org.keycloak.adapters.authentication.ClientCredentialsProviderを実装しています。

33  {
34  return PROVIDER_ID;
35  }
static final String PROVIDER_ID
Definition: JWTClientSecretCredentialsProvider.java:28

◆ init()

void org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.init ( KeycloakDeployment  deployment,
Object  config 
)
inline

org.keycloak.adapters.authentication.ClientCredentialsProviderを実装しています。

38  {
39  if (config == null || !(config instanceof Map)) {
40  throw new RuntimeException("Configuration of jwt credentials by client secret is missing or incorrect for client '" + deployment.getResourceName() + "'. Check your adapter configuration");
41  }
42 
43  Map<String, Object> cfg = (Map<String, Object>) config;
44  String clientSecretString = (String) cfg.get("secret");
45  if (clientSecretString == null) {
46  throw new RuntimeException("Missing parameter secret-jwt in configuration of jwt for client " + deployment.getResourceName());
47  }
48  setClientSecret(clientSecretString);
49  }
void setClientSecret(String clientSecretString)
Definition: JWTClientSecretCredentialsProvider.java:58

◆ setClientCredentials()

void org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.setClientCredentials ( KeycloakDeployment  deployment,
Map< String, String >  requestHeaders,
Map< String, String >  formParams 
)
inline

org.keycloak.adapters.authentication.ClientCredentialsProviderを実装しています。

52  {
53  String signedToken = createSignedRequestToken(deployment.getResourceName(), deployment.getRealmInfoUrl());
54  formParams.put(OAuth2Constants.CLIENT_ASSERTION_TYPE, OAuth2Constants.CLIENT_ASSERTION_TYPE_JWT);
55  formParams.put(OAuth2Constants.CLIENT_ASSERTION, signedToken);
56  }
String createSignedRequestToken(String clientId, String realmInfoUrl)
Definition: JWTClientSecretCredentialsProvider.java:71

◆ setClientSecret()

void org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.setClientSecret ( String  clientSecretString)
inline
58  {
59  // Get client secret and validate signature
60  // According to <a href="http://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication">OIDC's client authentication spec</a>,
61  // The HMAC (Hash-based Message Authentication Code) is calculated using the octets of the UTF-8 representation of the client_secret as the shared key.
62  // Use "HmacSHA256" consulting <a href="https://docs.oracle.com/javase/jp/8/docs/api/javax/crypto/Mac.html">java8 api</a>
63  // because it must be implemented in every java platform.
64  try {
65  clientSecret = new SecretKeySpec(clientSecretString.getBytes("UTF-8"), "HmacSHA256");
66  } catch (UnsupportedEncodingException e) {
67  throw new RuntimeException("Failed to create secret key spec due to unsupported encoding.");
68  }
69  }
SecretKey clientSecret
Definition: JWTClientSecretCredentialsProvider.java:30

メンバ詳解

◆ clientSecret

SecretKey org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.clientSecret
private

◆ logger

final Logger org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.logger = Logger.getLogger(JWTClientSecretCredentialsProvider.class)
staticprivate

◆ PROVIDER_ID

final String org.keycloak.adapters.authentication.JWTClientSecretCredentialsProvider.PROVIDER_ID = "secret-jwt"
static

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