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

公開メンバ関数

void mainCmd (String[] args) throws Exception
 
String getHome ()
 
void passwordKey ()
 
JWE createJWE ()
 
String encrypt (String payload)
 
String decrypt (String encoded)
 
File getConfigDirectory ()
 
File getConfigFile ()
 
File getTokenFilePath (String client)
 
File getTokenDirectory ()
 
void install ()
 
void printHelp ()
 
AdapterConfig getConfig ()
 
String readToken (String client) throws Exception
 
String readRefreshToken (String client) throws Exception
 
void token () throws Exception
 
String getProperty (String name)
 
Client getHttpClient ()
 
void login () throws Exception
 
void doConsoleLogin () throws Exception
 
void logout () throws Exception
 
void uninstall () throws Exception
 

静的公開メンバ関数

static void main (String[] args) throws Exception
 
static String getenv (String name, String defaultValue)
 

静的公開変数類

static final String KC_SESSION_KEY = "KC_SESSION_KEY"
 
static final String KC_LOGIN_CONFIG_PATH = "KC_LOGIN_CONFIG_PATH"
 

限定公開メンバ関数

boolean forceLogin ()
 
String generateEncryptionKey (String password) throws NoSuchAlgorithmException, InvalidKeySpecException
 
String getEncryptionKey ()
 
void checkEnv ()
 
void promptLocalPassword ()
 
String readFile (File fp)
 
byte [] readFileRaw (File fp) throws IOException
 
void writeFile (File fp, String payload)
 
String getMasterClientSecret ()
 
String getServer ()
 
String getRealm ()
 

限定公開変数類

Map< String, String > config
 
boolean debug = true
 
boolean forceLogin
 
boolean browserLogin
 
String encryptionKey
 
boolean encrypted = false
 

静的限定公開変数類

static byte [] salt = new byte[]{-4, 88, 66, -101, 78, -94, 21, 105}
 

変数

String [] args = null
 

詳解

著者
Bill Burke
バージョン
Revision
1

関数詳解

◆ checkEnv()

void org.keycloak.adapters.installed.KcinitDriver.checkEnv ( )
inlineprotectedinherited
230  {
231  File configFile = getConfigFile();
232  if (!configFile.exists()) {
233  KeycloakInstalled.console().writer().println("You have not configured kcinit. Please run 'kcinit install' to configure.");
234  System.exit(1);
235  }
236  byte[] data = new byte[0];
237  try {
238  data = readFileRaw(configFile);
239  } catch (IOException e) {
240 
241  }
242  if (data == null) {
243  KeycloakInstalled.console().writer().println("Config file unreadable. Please run 'kcinit install' to configure.");
244  System.exit(1);
245 
246  }
247  String encodedJwe = null;
248  try {
249  encodedJwe = new String(data, "UTF-8");
250  } catch (UnsupportedEncodingException e) {
251  e.printStackTrace();
252  }
253 
254  if (encodedJwe.contains("realm")) {
255  encrypted = false;
256  return;
257  } else {
258  encrypted = true;
259  }
260 
261  if (System.getenv(KC_SESSION_KEY) == null) {
263  }
264  }
byte [] readFileRaw(File fp)
Definition: KcinitDriver.java:295
boolean encrypted
Definition: KcinitDriver.java:228
File getConfigFile()
Definition: KcinitDriver.java:216
void promptLocalPassword()
Definition: KcinitDriver.java:266
static final String KC_SESSION_KEY
Definition: KcinitDriver.java:73

◆ createJWE()

JWE org.keycloak.adapters.installed.KcinitDriver.createJWE ( )
inlineinherited
151  {
152  String key = getEncryptionKey();
153  if (key == null) {
154  throw new RuntimeException(KC_SESSION_KEY + " env var not set");
155  }
156  byte[] aesKey = null;
157  try {
158  aesKey = Base64.decode(key.getBytes("UTF-8"));
159  } catch (IOException e) {
160  throw new RuntimeException("invalid " + KC_SESSION_KEY + "env var");
161  }
162 
163  JWE jwe = new JWE();
164  final SecretKey aesSecret = new SecretKeySpec(aesKey, "AES");
165  jwe.getKeyStorage()
166  .setEncryptionKey(aesSecret);
167  return jwe;
168  }
Definition: JWE.java:41
JWEKeyStorage setEncryptionKey(Key encryptionKey)
Definition: JWEKeyStorage.java:44
static byte [] decode(byte[] source)
Definition: Base64.java:1118
String getEncryptionKey()
Definition: KcinitDriver.java:172
JWEKeyStorage getKeyStorage()
Definition: JWE.java:87
static final String KC_SESSION_KEY
Definition: KcinitDriver.java:73
Definition: Base64.java:150

◆ decrypt()

String org.keycloak.adapters.installed.KcinitDriver.decrypt ( String  encoded)
inlineinherited
192  {
193  JWE jwe = createJWE();
194  try {
195  jwe.verifyAndDecodeJwe(encoded);
196  byte[] content = jwe.getContent();
197  if (content == null) return null;
198  return new String(content, "UTF-8");
199  } catch (Exception ex) {
200  throw new RuntimeException("cannot decrypt payload", ex);
201 
202  }
203 
204  }
byte [] getContent()
Definition: JWE.java:102
JWE createJWE()
Definition: KcinitDriver.java:151
Definition: JWE.java:41
JWE verifyAndDecodeJwe(String jweStr)
Definition: JWE.java:169

◆ doConsoleLogin()

void org.keycloak.adapters.installed.KcinitDriver.doConsoleLogin ( ) throws Exception
inlineinherited
654  {
655  String masterClient = getMasterClient();
656  AdapterConfig config = getConfig();
657  KeycloakInstalled installed = new KeycloakInstalled(KeycloakDeploymentBuilder.build(config));
658  //System.err.println("calling loginCommandLine");
659  if (!installed.loginCommandLine()) {
660  System.exit(1);
661  }
662  processResponse(installed, masterClient);
663  }
String getMasterClient()
Definition: KcinitDriver.java:665
AdapterConfig getConfig()
Definition: KcinitDriver.java:394
Map< String, String > config
Definition: KcinitDriver.java:75
void processResponse(KeycloakInstalled installed, String client)
Definition: KcinitDriver.java:669

◆ encrypt()

String org.keycloak.adapters.installed.KcinitDriver.encrypt ( String  payload)
inlineinherited
177  {
178  JWE jwe = createJWE();
180  try {
181  jwe.header(jweHeader).content(payload.getBytes("UTF-8"));
182  } catch (UnsupportedEncodingException e) {
183  throw new RuntimeException("cannot encode payload as UTF-8");
184  }
185  try {
186  return jwe.encodeJwe();
187  } catch (JWEException e) {
188  throw new RuntimeException("cannot encrypt payload", e);
189  }
190  }
static final String A128CBC_HS256
Definition: JWEConstants.java:28
JWE createJWE()
Definition: KcinitDriver.java:151
Definition: JWEHeader.java:32
String encodeJwe()
Definition: JWE.java:123
Definition: JWE.java:41
JWEHeader header
Definition: JWE.java:47
Definition: JWEException.java:23
static final String A128KW
Definition: JWEConstants.java:26
Definition: JWEConstants.java:23

◆ forceLogin()

boolean org.keycloak.adapters.installed.KcinitDriver.forceLogin ( )
inlineprotectedinherited
619  {
620  return args.length > 0 && args[0].equals("-f");
621 
622  }
String [] args
Definition: KcinitDriver.java:80

◆ generateEncryptionKey()

String org.keycloak.adapters.installed.KcinitDriver.generateEncryptionKey ( String  password) throws NoSuchAlgorithmException, InvalidKeySpecException
inlineprotectedinherited
143  {
144  SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
145  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 100, 128);
146  SecretKey tmp = factory.generateSecret(spec);
147  byte[] aeskey = tmp.getEncoded();
148  return Base64.encodeBytes(aeskey);
149  }
static String encodeBytes(byte[] source)
Definition: Base64.java:714
static byte [] salt
Definition: KcinitDriver.java:78
Definition: Base64.java:150

◆ getConfig()

AdapterConfig org.keycloak.adapters.installed.KcinitDriver.getConfig ( )
inlineinherited
394  {
395  File configFile = getConfigFile();
396  if (!configFile.exists()) {
397  KeycloakInstalled.console().writer().println("You have not configured kcinit. Please run 'kcinit install' to configure.");
398  System.exit(1);
399  return null;
400  }
401 
402  AdapterConfig config = new AdapterConfig();
403  config.setAuthServerUrl((String) getConfigProperties().get("server"));
404  config.setRealm((String) getConfigProperties().get("realm"));
405  config.setResource((String) getConfigProperties().get("client"));
406  config.setSslRequired("external");
407  String secret = (String) getConfigProperties().get("secret");
408  if (secret != null && !secret.trim().equals("")) {
409  Map<String, Object> creds = new HashMap<>();
410  creds.put("secret", secret);
411  config.setCredentials(creds);
412  } else {
413  config.setPublicClient(true);
414  }
415  return config;
416  }
Map< String, String > getConfigProperties()
Definition: KcinitDriver.java:418
File getConfigFile()
Definition: KcinitDriver.java:216
Map< String, String > config
Definition: KcinitDriver.java:75

◆ getConfigDirectory()

File org.keycloak.adapters.installed.KcinitDriver.getConfigDirectory ( )
inlineinherited
211  {
212  return Paths.get(getHome(), getenv(KC_LOGIN_CONFIG_PATH, ".keycloak"), "kcinit").toFile();
213  }
static final String KC_LOGIN_CONFIG_PATH
Definition: KcinitDriver.java:74
static String getenv(String name, String defaultValue)
Definition: KcinitDriver.java:206
String getHome()
Definition: KcinitDriver.java:117

◆ getConfigFile()

File org.keycloak.adapters.installed.KcinitDriver.getConfigFile ( )
inlineinherited
216  {
217  return Paths.get(getHome(), getenv(KC_LOGIN_CONFIG_PATH, ".keycloak"), "kcinit", "config.json").toFile();
218  }
static final String KC_LOGIN_CONFIG_PATH
Definition: KcinitDriver.java:74
static String getenv(String name, String defaultValue)
Definition: KcinitDriver.java:206
String getHome()
Definition: KcinitDriver.java:117

◆ getEncryptionKey()

String org.keycloak.adapters.installed.KcinitDriver.getEncryptionKey ( )
inlineprotectedinherited
172  {
173  if (encryptionKey != null) return encryptionKey;
174  return System.getenv(KC_SESSION_KEY);
175  }
String encryptionKey
Definition: KcinitDriver.java:170
static final String KC_SESSION_KEY
Definition: KcinitDriver.java:73

◆ getenv()

static String org.keycloak.adapters.installed.KcinitDriver.getenv ( String  name,
String  defaultValue 
)
inlinestaticinherited
206  {
207  String val = System.getenv(name);
208  return val == null ? defaultValue : val;
209  }

◆ getHome()

String org.keycloak.adapters.installed.KcinitDriver.getHome ( )
inlineinherited
117  {
118  String home = System.getenv("HOME");
119  if (home == null) {
120  home = System.getProperty("HOME");
121  if (home == null) {
122  home = Paths.get("").toAbsolutePath().normalize().toString();
123  }
124  }
125  return home;
126  }

◆ getHttpClient()

Client org.keycloak.adapters.installed.KcinitDriver.getHttpClient ( )
inlineinherited
624  {
625  return new ResteasyClientBuilder().disableTrustManager().build();
626  }

◆ getMasterClientSecret()

String org.keycloak.adapters.installed.KcinitDriver.getMasterClientSecret ( )
inlineprotectedinherited
603  {
604  return getProperty("secret");
605  }
String getProperty(String name)
Definition: KcinitDriver.java:615

◆ getProperty()

String org.keycloak.adapters.installed.KcinitDriver.getProperty ( String  name)
inlineinherited
615  {
616  return (String) getConfigProperties().get(name);
617  }
Map< String, String > getConfigProperties()
Definition: KcinitDriver.java:418

◆ getRealm()

String org.keycloak.adapters.installed.KcinitDriver.getRealm ( )
inlineprotectedinherited
611  {
612  return getProperty("realm");
613  }
String getProperty(String name)
Definition: KcinitDriver.java:615

◆ getServer()

String org.keycloak.adapters.installed.KcinitDriver.getServer ( )
inlineprotectedinherited
607  {
608  return getProperty("server");
609  }
String getProperty(String name)
Definition: KcinitDriver.java:615

◆ getTokenDirectory()

File org.keycloak.adapters.installed.KcinitDriver.getTokenDirectory ( )
inlineinherited
224  {
225  return Paths.get(getHome(), getenv(KC_LOGIN_CONFIG_PATH, ".keycloak"), "kcinit", "tokens").toFile();
226  }
static final String KC_LOGIN_CONFIG_PATH
Definition: KcinitDriver.java:74
static String getenv(String name, String defaultValue)
Definition: KcinitDriver.java:206
String getHome()
Definition: KcinitDriver.java:117

◆ getTokenFilePath()

File org.keycloak.adapters.installed.KcinitDriver.getTokenFilePath ( String  client)
inlineinherited
220  {
221  return Paths.get(getHome(), getenv(KC_LOGIN_CONFIG_PATH, ".keycloak"), "kcinit", "tokens", client).toFile();
222  }
static final String KC_LOGIN_CONFIG_PATH
Definition: KcinitDriver.java:74
static String getenv(String name, String defaultValue)
Definition: KcinitDriver.java:206
String getHome()
Definition: KcinitDriver.java:117

◆ install()

void org.keycloak.adapters.installed.KcinitDriver.install ( )
inlineinherited
318  {
319  if (getEncryptionKey() == null) {
320  if (KeycloakInstalled.console().confirm("Do you want to protect tokens stored locally with a password? (y/n): ")) {
321  String password = "p";
322  String confirm = "c";
323  do {
324  password = KeycloakInstalled.console().passwordPrompt("Enter local password: ");
325  confirm = KeycloakInstalled.console().passwordPrompt("Confirm local password: ");
326  if (!password.equals(confirm)) {
327  KeycloakInstalled.console().writer().println();
328  KeycloakInstalled.console().writer().println("Confirmation does not match. Try again.");
329  KeycloakInstalled.console().writer().println();
330  }
331  } while (!password.equals(confirm));
332  try {
333  this.encrypted = true;
334  this.encryptionKey = generateEncryptionKey(password);
335  } catch (Exception e) {
336  e.printStackTrace();
337  System.exit(1);
338  }
339  }
340  } else {
341  if (!KeycloakInstalled.console().confirm("KC_SESSION_KEY env var already set. Do you want to use this as your local encryption key? (y/n): ")) {
342  KeycloakInstalled.console().writer().println("Unset KC_SESSION_KEY env var and run again");
343  System.exit(1);
344  }
345  this.encrypted = true;
347  }
348  String server = KeycloakInstalled.console().readLine("Authentication server URL [http://localhost:8080/auth]: ").trim();
349  String realm = KeycloakInstalled.console().readLine("Name of realm [master]: ").trim();
350  String client = KeycloakInstalled.console().readLine("CLI client id [kcinit]: ").trim();
351  String secret = KeycloakInstalled.console().readLine("CLI client secret [none]: ").trim();
352  if (server.equals("")) {
353  server = "http://localhost:8080/auth";
354  }
355  if (realm.equals("")) {
356  realm = "master";
357  }
358  if (client.equals("")) {
359  client = "kcinit";
360  }
361  File configDir = getTokenDirectory();
362  configDir.mkdirs();
363 
364  File configFile = getConfigFile();
365  Map<String, String> props = new HashMap<>();
366  props.put("server", server);
367  props.put("realm", realm);
368  props.put("client", client);
369  props.put("secret", secret);
370 
371  try {
372  String json = JsonSerialization.writeValueAsString(props);
373  writeFile(configFile, json);
374  } catch (Exception e) {
375  e.printStackTrace();
376  }
377 
378  KeycloakInstalled.console().writer().println();
379  KeycloakInstalled.console().writer().println("Installation complete!");
380  KeycloakInstalled.console().writer().println();
381  }
Definition: JsonSerialization.java:38
File getTokenDirectory()
Definition: KcinitDriver.java:224
void writeFile(File fp, String payload)
Definition: KcinitDriver.java:304
boolean encrypted
Definition: KcinitDriver.java:228
File getConfigFile()
Definition: KcinitDriver.java:216
String encryptionKey
Definition: KcinitDriver.java:170
String generateEncryptionKey(String password)
Definition: KcinitDriver.java:143
String getEncryptionKey()
Definition: KcinitDriver.java:172
static String writeValueAsString(Object obj)
Definition: JsonSerialization.java:60

◆ login()

void org.keycloak.adapters.installed.KcinitDriver.login ( ) throws Exception
inlineinherited
628  {
629  checkEnv();
630  this.args = Arrays.copyOfRange(this.args, 1, this.args.length);
631  for (String arg : args) {
632  if (arg.equals("-f") || arg.equals("-force")) {
633  forceLogin = true;
634  this.args = Arrays.copyOfRange(this.args, 1, this.args.length);
635  } else if (arg.equals("-browser") || arg.equals("-b")) {
636  browserLogin = true;
637  this.args = Arrays.copyOfRange(this.args, 1, this.args.length);
638  } else {
639  System.err.println("Illegal argument: " + arg);
640  printHelp();
641  System.exit(1);
642  }
643  }
644 
645  String masterClient = getMasterClient();
646  if (!forceLogin && readToken(masterClient) != null) {
647  KeycloakInstalled.console().writer().println("Already logged in. `kcinit -f` to force relogin");
648  return;
649  }
650  doConsoleLogin();
651  KeycloakInstalled.console().writer().println("Login successful!");
652  }
boolean forceLogin()
Definition: KcinitDriver.java:619
String [] args
Definition: KcinitDriver.java:80
String getMasterClient()
Definition: KcinitDriver.java:665
String readToken(String client)
Definition: KcinitDriver.java:435
void checkEnv()
Definition: KcinitDriver.java:230
void printHelp()
Definition: KcinitDriver.java:384
boolean browserLogin
Definition: KcinitDriver.java:83
void doConsoleLogin()
Definition: KcinitDriver.java:654

◆ logout()

void org.keycloak.adapters.installed.KcinitDriver.logout ( ) throws Exception
inlineinherited
678  {
680  if (token != null) {
681  try {
682  KeycloakDeployment deployment = KeycloakDeploymentBuilder.build(getConfig());
683  ServerRequest.invokeLogout(deployment, token);
684  } catch (Exception e) {
685  if (debug) {
686  e.printStackTrace();
687  }
688  }
689 
690  }
691  if (getTokenDirectory().exists()) {
692  for (File fp : getTokenDirectory().listFiles()) fp.delete();
693  }
694  }
boolean debug
Definition: KcinitDriver.java:76
File getTokenDirectory()
Definition: KcinitDriver.java:224
String getMasterClient()
Definition: KcinitDriver.java:665
AdapterConfig getConfig()
Definition: KcinitDriver.java:394
void token()
Definition: KcinitDriver.java:505
String readRefreshToken(String client)
Definition: KcinitDriver.java:464

◆ main()

static void org.keycloak.adapters.KcinitMain.main ( String []  args) throws Exception
inlinestatic
27  {
28  new KcinitMain().mainCmd(args);
29  }
String [] args
Definition: KcinitDriver.java:80

◆ mainCmd()

void org.keycloak.adapters.installed.KcinitDriver.mainCmd ( String []  args) throws Exception
inlineinherited
85  {
86 
87  this.args = args;
88 
89 
90  if (args.length == 0) {
91  printHelp();
92  return;
93  }
94 
95  if (args[0].equalsIgnoreCase("token")) {
96  //System.err.println("executing token");
97  token();
98  } else if (args[0].equalsIgnoreCase("login")) {
99  login();
100  } else if (args[0].equalsIgnoreCase("logout")) {
101  logout();
102  } else if (args[0].equalsIgnoreCase("env")) {
103  System.out.println(System.getenv().toString());
104  } else if (args[0].equalsIgnoreCase("install")) {
105  install();
106  } else if (args[0].equalsIgnoreCase("uninstall")) {
107  uninstall();
108  } else if (args[0].equalsIgnoreCase("password")) {
109  passwordKey();
110  } else {
111  KeycloakInstalled.console().writer().println("Unknown command: " + args[0]);
112  KeycloakInstalled.console().writer().println();
113  printHelp();
114  }
115  }
void passwordKey()
Definition: KcinitDriver.java:128
String [] args
Definition: KcinitDriver.java:80
void install()
Definition: KcinitDriver.java:318
void uninstall()
Definition: KcinitDriver.java:695
void logout()
Definition: KcinitDriver.java:678
void printHelp()
Definition: KcinitDriver.java:384
void token()
Definition: KcinitDriver.java:505
void login()
Definition: KcinitDriver.java:628

◆ passwordKey()

void org.keycloak.adapters.installed.KcinitDriver.passwordKey ( )
inlineinherited
128  {
129  if (args.length < 2) {
130  printHelp();
131  System.exit(1);
132  }
133  String password = args[1];
134  try {
135  String encodedKey = generateEncryptionKey(password);
136  System.out.printf(encodedKey);
137  } catch (Exception e) {
138  e.printStackTrace();
139  System.exit(1);
140  }
141  }
String [] args
Definition: KcinitDriver.java:80
String generateEncryptionKey(String password)
Definition: KcinitDriver.java:143
void printHelp()
Definition: KcinitDriver.java:384

◆ printHelp()

void org.keycloak.adapters.installed.KcinitDriver.printHelp ( )
inlineinherited
384  {
385  KeycloakInstalled.console().writer().println("Commands:");
386  KeycloakInstalled.console().writer().println(" login [-f] -f forces login");
387  KeycloakInstalled.console().writer().println(" logout");
388  KeycloakInstalled.console().writer().println(" token [client] - print access token of desired client. Defaults to default master client. Will print either 'error', 'not-allowed', or 'login-required' on error.");
389  KeycloakInstalled.console().writer().println(" install - Install this utility. Will store in $HOME/.keycloak/kcinit unless " + KC_LOGIN_CONFIG_PATH + " env var is set");
390  System.exit(1);
391  }
static final String KC_LOGIN_CONFIG_PATH
Definition: KcinitDriver.java:74

◆ promptLocalPassword()

void org.keycloak.adapters.installed.KcinitDriver.promptLocalPassword ( )
inlineprotectedinherited
266  {
267  String password = KeycloakInstalled.console().passwordPrompt("Enter password to unlock kcinit config files: ");
268  try {
270  } catch (Exception e) {
271  throw new RuntimeException(e);
272  }
273  }
String encryptionKey
Definition: KcinitDriver.java:170
String generateEncryptionKey(String password)
Definition: KcinitDriver.java:143

◆ readFile()

String org.keycloak.adapters.installed.KcinitDriver.readFile ( File  fp)
inlineprotectedinherited
276  {
277  try {
278  byte[] data = readFileRaw(fp);
279  if (data == null) return null;
280  String file = new String(data, "UTF-8");
281  if (!encrypted) {
282  return file;
283  }
284  String decrypted = decrypt(file);
285  if (decrypted == null)
286  throw new RuntimeException("Unable to decrypt file. Did you set your local password correctly?");
287  return decrypted;
288  } catch (IOException e) {
289  throw new RuntimeException("failed to decrypt file: " + fp.getAbsolutePath() + " Did you set your local password correctly?", e);
290  }
291 
292 
293  }
String decrypt(String encoded)
Definition: KcinitDriver.java:192
byte [] readFileRaw(File fp)
Definition: KcinitDriver.java:295
boolean encrypted
Definition: KcinitDriver.java:228

◆ readFileRaw()

byte [] org.keycloak.adapters.installed.KcinitDriver.readFileRaw ( File  fp) throws IOException
inlineprotectedinherited
295  {
296  if (!fp.exists()) return null;
297  FileInputStream fis = new FileInputStream(fp);
298  byte[] data = new byte[(int) fp.length()];
299  fis.read(data);
300  fis.close();
301  return data;
302  }

◆ readRefreshToken()

String org.keycloak.adapters.installed.KcinitDriver.readRefreshToken ( String  client) throws Exception
inlineinherited
464  {
465  String json = getTokenResponse(client);
466  if (json == null) return null;
467 
468 
469  if (json != null) {
470  try {
471  AccessTokenResponse tokenResponse = JsonSerialization.readValue(json, AccessTokenResponse.class);
472  return tokenResponse.getRefreshToken();
473  } catch (Exception e) {
474  if (debug) {
475  e.printStackTrace();
476  }
477  File tokenFile = getTokenFilePath(client);
478  if (tokenFile.exists()) {
479  tokenFile.delete();
480  }
481 
482  return null;
483  }
484  }
485  return null;
486 
487  }
Definition: JsonSerialization.java:38
boolean debug
Definition: KcinitDriver.java:76
static< T > T readValue(byte[] bytes, Class< T > type)
Definition: JsonSerialization.java:68
String getTokenResponse(String client)
Definition: KcinitDriver.java:490
File getTokenFilePath(String client)
Definition: KcinitDriver.java:220

◆ readToken()

String org.keycloak.adapters.installed.KcinitDriver.readToken ( String  client) throws Exception
inlineinherited
435  {
436  String json = getTokenResponse(client);
437  if (json == null) return null;
438 
439 
440  if (json != null) {
441  try {
442  AccessTokenResponse tokenResponse = JsonSerialization.readValue(json, AccessTokenResponse.class);
443  if (Time.currentTime() < tokenResponse.getExpiresIn()) {
444  return tokenResponse.getToken();
445  }
446  AdapterConfig config = getConfig();
447  KeycloakInstalled installed = new KeycloakInstalled(KeycloakDeploymentBuilder.build(config));
448  installed.refreshToken(tokenResponse.getRefreshToken());
449  processResponse(installed, client);
450  return tokenResponse.getToken();
451  } catch (Exception e) {
452  File tokenFile = getTokenFilePath(client);
453  if (tokenFile.exists()) {
454  tokenFile.delete();
455  }
456 
457  return null;
458  }
459  }
460  return null;
461 
462  }
Definition: JsonSerialization.java:38
AdapterConfig getConfig()
Definition: KcinitDriver.java:394
static< T > T readValue(byte[] bytes, Class< T > type)
Definition: JsonSerialization.java:68
Map< String, String > config
Definition: KcinitDriver.java:75
void processResponse(KeycloakInstalled installed, String client)
Definition: KcinitDriver.java:669
String getTokenResponse(String client)
Definition: KcinitDriver.java:490
File getTokenFilePath(String client)
Definition: KcinitDriver.java:220

◆ token()

void org.keycloak.adapters.installed.KcinitDriver.token ( ) throws Exception
inlineinherited
505  {
506  KeycloakInstalled.console().stderrOutput();
507 
508  checkEnv();
509  String masterClient = getMasterClient();
510  String client = masterClient;
511  if (args.length > 1) {
512  client = args[1];
513  }
514  //System.err.println("readToken: " + client);
515  String token = readToken(client);
516  if (token != null) {
517  System.out.print(token);
518  return;
519  }
520  if (token == null && client.equals(masterClient)) {
521  //System.err.println("not logged in, logging in.");
522  doConsoleLogin();
523  token = readToken(client);
524  if (token != null) {
525  System.out.print(token);
526  return;
527  }
528 
529  }
530  String masterToken = readToken(masterClient);
531  if (masterToken == null) {
532  //System.err.println("not logged in, logging in.");
533  doConsoleLogin();
534  masterToken = readToken(masterClient);
535  if (masterToken == null) {
536  System.err.println("Login failed. Cannot retrieve token");
537  System.exit(1);
538  }
539  }
540 
541  //System.err.println("exchange: " + client);
542  Client httpClient = getHttpClient();
543 
544  WebTarget exchangeUrl = httpClient.target(getServer())
545  .path("/realms")
546  .path(getRealm())
547  .path("protocol/openid-connect/token");
548 
549  Form form = new Form()
550  .param(OAuth2Constants.GRANT_TYPE, OAuth2Constants.TOKEN_EXCHANGE_GRANT_TYPE)
551  .param(OAuth2Constants.CLIENT_ID, masterClient)
552  .param(OAuth2Constants.SUBJECT_TOKEN, masterToken)
553  .param(OAuth2Constants.SUBJECT_TOKEN_TYPE, OAuth2Constants.ACCESS_TOKEN_TYPE)
554  .param(OAuth2Constants.REQUESTED_TOKEN_TYPE, OAuth2Constants.REFRESH_TOKEN_TYPE)
555  .param(OAuth2Constants.AUDIENCE, client);
556  if (getMasterClientSecret() != null) {
557  form.param(OAuth2Constants.CLIENT_SECRET, getMasterClientSecret());
558  }
559  Response response = exchangeUrl.request().post(Entity.form(
560  form
561  ));
562 
563  if (response.getStatus() == 401 || response.getStatus() == 403) {
564  response.close();
565  System.err.println("Not allowed to exchange for client token");
566  System.exit(1);
567  }
568 
569  if (response.getStatus() != 200) {
570  if (response.getMediaType() != null && response.getMediaType().equals(MediaType.APPLICATION_JSON_TYPE)) {
571  try {
572  String json = response.readEntity(String.class);
573  OAuth2ErrorRepresentation error = JsonSerialization.readValue(json, OAuth2ErrorRepresentation.class);
574  System.err.println("Failed to exchange token: " + error.getError() + ". " + error.getErrorDescription());
575  System.exit(1);
576  } catch (Exception ignore) {
577  ignore.printStackTrace();
578 
579  }
580  }
581 
582  response.close();
583  System.err.println("Unknown error exchanging for client token: " + response.getStatus());
584  System.exit(1);
585  }
586 
587  String json = response.readEntity(String.class);
588  response.close();
589  AccessTokenResponse tokenResponse = JsonSerialization.readValue(json, AccessTokenResponse.class);
590  if (tokenResponse.getToken() != null) {
591  getTokenDirectory().mkdirs();
592  tokenResponse.setExpiresIn(Time.currentTime() + tokenResponse.getExpiresIn());
593  tokenResponse.setIdToken(null);
594  json = JsonSerialization.writeValueAsString(tokenResponse);
595  writeFile(getTokenFilePath(client), json);
596  System.out.printf(tokenResponse.getToken());
597  } else {
598  System.err.println("Error processing token");
599  System.exit(1);
600  }
601  }
String [] args
Definition: KcinitDriver.java:80
Definition: JsonSerialization.java:38
File getTokenDirectory()
Definition: KcinitDriver.java:224
String getMasterClient()
Definition: KcinitDriver.java:665
void writeFile(File fp, String payload)
Definition: KcinitDriver.java:304
static< T > T readValue(byte[] bytes, Class< T > type)
Definition: JsonSerialization.java:68
String getMasterClientSecret()
Definition: KcinitDriver.java:603
String getServer()
Definition: KcinitDriver.java:607
String readToken(String client)
Definition: KcinitDriver.java:435
void checkEnv()
Definition: KcinitDriver.java:230
Client getHttpClient()
Definition: KcinitDriver.java:624
void token()
Definition: KcinitDriver.java:505
File getTokenFilePath(String client)
Definition: KcinitDriver.java:220
void doConsoleLogin()
Definition: KcinitDriver.java:654
static String writeValueAsString(Object obj)
Definition: JsonSerialization.java:60
String getRealm()
Definition: KcinitDriver.java:611

◆ uninstall()

void org.keycloak.adapters.installed.KcinitDriver.uninstall ( ) throws Exception
inlineinherited
695  {
696  File configFile = getConfigFile();
697  if (configFile.exists()) configFile.delete();
698  if (getTokenDirectory().exists()) {
699  for (File fp : getTokenDirectory().listFiles()) fp.delete();
700  }
701  }
File getTokenDirectory()
Definition: KcinitDriver.java:224
File getConfigFile()
Definition: KcinitDriver.java:216

◆ writeFile()

void org.keycloak.adapters.installed.KcinitDriver.writeFile ( File  fp,
String  payload 
)
inlineprotectedinherited
304  {
305  try {
306  String data = payload;
307  if (encrypted) data = encrypt(payload);
308  FileOutputStream fos = new FileOutputStream(fp);
309  fos.write(data.getBytes("UTF-8"));
310  fos.flush();
311  fos.close();
312  } catch (IOException e) {
313  throw new RuntimeException(e);
314  }
315  }
boolean encrypted
Definition: KcinitDriver.java:228
String encrypt(String payload)
Definition: KcinitDriver.java:177

メンバ詳解

◆ args

String [] org.keycloak.adapters.installed.KcinitDriver.args = null
packageinherited

◆ browserLogin

boolean org.keycloak.adapters.installed.KcinitDriver.browserLogin
protectedinherited

◆ config

Map<String, String> org.keycloak.adapters.installed.KcinitDriver.config
protectedinherited

◆ debug

boolean org.keycloak.adapters.installed.KcinitDriver.debug = true
protectedinherited

◆ encrypted

boolean org.keycloak.adapters.installed.KcinitDriver.encrypted = false
protectedinherited

◆ encryptionKey

String org.keycloak.adapters.installed.KcinitDriver.encryptionKey
protectedinherited

◆ forceLogin

boolean org.keycloak.adapters.installed.KcinitDriver.forceLogin
protectedinherited

◆ KC_LOGIN_CONFIG_PATH

final String org.keycloak.adapters.installed.KcinitDriver.KC_LOGIN_CONFIG_PATH = "KC_LOGIN_CONFIG_PATH"
staticinherited

◆ KC_SESSION_KEY

final String org.keycloak.adapters.installed.KcinitDriver.KC_SESSION_KEY = "KC_SESSION_KEY"
staticinherited

◆ salt

byte [] org.keycloak.adapters.installed.KcinitDriver.salt = new byte[]{-4, 88, 66, -101, 78, -94, 21, 105}
staticprotectedinherited

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