Keycloakをお手軽に試したい(3)

Windowsでもお手軽にできるんじゃないかと試したのがこれ。

```
unzip keycloak-6.0.1.zip
set JBOSS_HOME=C:\kazu\ex\keycloak-6.0.1
git clone https://github.com/keycloak/keycloak-quickstarts.git
cd C:\kazu\ex\keycloak-quickstarts\app-profile-jee-vanilla
mvn clean wildfly:deploy
```
standalone.batでkeycloakを立ち上げておき、mvnでビルドした。
cmdの画面は以下になった。warもコピーされるのね。

```
C:\kazu\ex\keycloak-6.0.1\bin>standalone
Calling "C:\kazu\ex\keycloak-6.0.1\bin\standalone.conf.bat"
Setting JAVA property to "C:\sdk-8.0.5.15\bin\java"
===============================================================================
  JBoss Bootstrap Environment
  JBOSS_HOME: "C:\kazu\ex\keycloak-6.0.1"
  JAVA: "C:\sdk-8.0.5.15\bin\java"
  JAVA_OPTS: "-Dprogram.name=standalone.bat -Xms64M -Xmx512M -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman "
===============================================================================
13:53:04,088 INFO  [org.jboss.modules] (main) JBoss Modules version 1.9.0.Final
13:53:06,236 INFO  [org.jboss.msc] (main) JBoss MSC version 1.4.5.Final
13:53:06,250 INFO  [org.jboss.threads] (main) JBoss Threads version 2.3.3.Final
13:53:06,540 INFO  [org.jboss.as] (MSC service thread 1-2) WFLYSRV0049: Keycloak 6.0.1 (WildFly Core 8.0.0.Final) starting
  (snip)
13:54:08,658 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 6.0.1 (WildFly Core 8.0.0.Final) started in 66043ms - Started 580 of 842 services (560 services are lazy, passive or on-demand)
14:12:39,309 INFO  [org.jboss.as.repository] (management-handler-thread - 1) WFLYDR0001: Content added at location C:\kazu\ex\keycloak-6.0.1\standalone\data\content\18\10cd8aba41d6073c6b4e86eac1c13406acebe6\content
14:12:39,401 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-2) WFLYSRV0027: Starting deployment of "vanilla.war" (runtime-name: "vanilla.war")
14:12:48,471 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 69) WFLYUT0021: Registered web context: '/vanilla' for server 'default-server'
14:12:50,038 INFO  [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0010: Deployed "vanilla.war" (runtime-name : "vanilla.war")
```
他のサンプルもビルドすっかと試したら「keycloak.json」が無いと云われる。

```
C:\kazu\ex\keycloak-quickstarts\app-profile-jee-jsp>mvn wildfly:deploy
[INFO] Scanning for projects...
[INFO]
[INFO] -------< org.keycloak.quickstarts:keycloak-app-profile-jee-jsp >--------
[INFO] Building Keycloak Quickstart: app-profile-jee-jsp 6.0.1
[INFO] --------------------------------[ war ]---------------------------------
[INFO]
[INFO] >>> wildfly-maven-plugin:1.2.2.Final:deploy (default-cli) > package @ keycloak-app-profile-jee-jsp >>>
　　(snip)
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-quickstart-realm-file-exist) @ keycloak-app-profile-jee-jsp ---
[INFO]
[INFO] --- maven-enforcer-plugin:1.4.1:enforce (enforce-keycloak-file-exist) @ keycloak-app-profile-jee-jsp ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireFilesExist failed with message:
Some required files are missing:
C:\kazu\ex\keycloak-quickstarts\app-profile-jee-jsp\config\keycloak.json

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.058 s
[INFO] Finished at: 2019-06-21T15:14:59+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (enforce-keycloak-file-exist) on project keycloak-app-profile-jee-jsp: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

C:\kazu\ex\keycloak-quickstarts\app-profile-jee-jsp>
```
素直にconfig配下にある「keycloak-example.json」を「keycloak.json」にコピーしましょう。また、keycloak.jsonのauth-server-urlはhttp://localhost:8180/auth
となっています。今回はkeycloakサーバ兼アプリケーションサーバとして使っていますので8080に修正しました。
Clientは「client-import.json」をインポートしました。
では、
http://localhost:8080/app-profile-jsp
にブラウザでアクセスします。TOKENボタンを押すと以下が表示されました。
備考 realmはquickstart-realm.jsonをインポートしています。ユーザにパスワードの設定も行っています。

```
{
  "jti" : "ca5ccee7-44b8-46b1-9bd7-23feef503efc",
  "exp" : 1561100112,
  "nbf" : 0,
  "iat" : 1561100052,
  "iss" : "http://localhost:8080/auth/realms/quickstart",
  "aud" : "account",
  "sub" : "e88b23d6-b3c6-40cc-9fe7-3ff834673b40",
  "typ" : "Bearer",
  "azp" : "app-profile-jsp",
  "auth_time" : 1561099548,
  "session_state" : "6fe96137-ab1e-425f-b4e3-ec18ec7bea7b",
  "name" : "Alice Liddel",
  "given_name" : "Alice",
  "family_name" : "Liddel",
  "preferred_username" : "alice",
  "email" : "alice@keycloak.org",
  "email_verified" : false,
  "acr" : "1",
  "allowed-origins" : [ "http://localhost:8080" ],
  "realm_access" : {
    "roles" : [ "offline_access", "user" ]
  },
  "resource_access" : {
    "account" : {
      "roles" : [ "manage-account", "manage-account-links" ]
    }
  },
  "scope" : "openid email profile"
}
```
keycloak.jsonの件ですが、[app-authz-jee-servletの説明](https://github.com/keycloak/keycloak-quickstarts/tree/latest/app-authz-jee-servlet)に以下があった。もしかしてビルド前にコピーっていうのはお約束？まぁ、コピーして、auth-server-url変更するんだけど。
you can configure the client adapter by copying config/keycloak-example.json to config/keycloak.json.

ところで、Keycloakサーバの止め方ですが、以下としています。コントロールCで止めてたんだけど、、やっぱりやだということで。
```
jboss-cli.bat -c --commands=shutdown
```
#Libertyとのやりとり
[はじめに: Liberty での OpenID Connect プロバイダーおよびクライアントの構成](https://www.ibm.com/support/knowledgecenter/ja/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/twlp_config_oidc_pc_examp_beginner.html)でLibetyで
OP(OpenID Provider)、RP(Relying Party)を構築し、そのサーバ間でOpenID Connect (OIDC) を用いるものです。
このOPをKeycloakでやってみたい。

まずは、Keycloakのssl対応ですね。
[Server Installation and Configuration Guide]
(https://keycloak-documentation.openstandia.jp/master/ja_JP/server_installation/index.html)
を参考にします。

```
C:\kazu\ex\keycloak-6.0.1\standalone\configuration>keytool -genkey -alias localhost -keyalg RSA -keystore keycloak.jks -validity 10950
鍵ストア・パスワードを入力してください:
新規パスワードを再入力してください:
姓名は?
  (snip)
この部署の国別コード (2 文字) は?
  [不明]:  JP
CN=不明, OU=不明, O=不明, L=不明, ST=不明, C=JP は正しいですか? ("yes" または "no" を入力してください)
  [いいえ(n)]:  y

<localhost> の鍵パスワードを入力してください:
        (鍵ストア・パスワードと同じ場合には Enter を押してください):
C:\kazu\ex\keycloak-6.0.1\standalone\configuration>keytool -exportcert -keystore keycloak.jks -storepass secret -alias localhost -file keycloak.cer
証明書はファイル <keycloak.cer> に保管されました
C:\kazu\ex\keycloak-6.0.1\standalone\configuration>
```
この証明書をLiberty側にインポートします。liberty-19.0.0.5はデフォルトでPKCS12形式(.p12)なので
以下としました。

```
C:\wlp-19.0.0.5\usr\servers\Liberty_RP\resources\security>keytool -import -alias keycloak -storetype PKCS12 -keystore key.p12 -file keycloak.cer
鍵ストア・パスワードを入力してください:
所有者: CN=不明, OU=不明, O=不明, L=不明, ST=不明, C=JP
発行者: CN=不明, OU=不明, O=不明, L=不明, ST=不明, C=JP
シリアル番号: 6f0244a2
有効期間: 19/06/21 21:44 から 49/06/13 21:44 まで
証明書フィンガープリント
         MD5:  1C:9A:BA:60:BA:F4:64:5C:0A:0A:0B:B1:EA:64:02:4F
         SHA1: 8A:67:FE:B6:F1:35:38:61:0B:19:69:18:07:36:EC:6C:04:69:62:65
         SHA256: CF:2B:B9:C6:57:6E:9C:10:D8:A1:39:CC:A0:64:26:20:07:49:F2:3A:8B:D2:FB:45:FC:55:34:A6:C3:36:5F:43
         署名アルゴリズム名: SHA256withRSA
         バージョン: 3

拡張:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: fe 91 3a ba 62 d0 38 87  bd 3d 7f 58 cb 69 a0 57  ....b.8....X.i.W
0010: 16 1e 3d 6d                                        ...m
]
]

この証明書を信頼しますか? [いいえ]:  y
証明書は鍵ストアに追加されました

C:\wlp-19.0.0.5\usr\servers\Liberty_RP\resources\security>
```
LibertyのRPにアクセスしたらKeycloakのログイン画面で「Invalid parameter: redirect_uri」となる。わからん。。
#おまけ
以下のコマンドでレルムの削除ができます。

```
kcadm.bat config credentials --server http://localhost:8080/auth --realm master --user admin --password admin
kcadm.bat delete realms/quickstart
```