{"id":67407,"date":"2023-12-27T08:00:00","date_gmt":"2023-12-26T23:00:00","guid":{"rendered":"https:\/\/www.creationline.com\/?p=67407"},"modified":"2023-12-26T19:28:43","modified_gmt":"2023-12-26T10:28:43","slug":"keycloak-23-0-3-%e3%81%a7-dpop-%e3%82%92%e8%a9%a6%e3%81%99-keycloak-dpop","status":"publish","type":"post","link":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407","title":{"rendered":"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\" id=\"keycloak-2300-%E3%81%A7-dpop-%E3%82%92%E8%A9%A6%E3%81%99\">1. \u6982\u8981<\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e<a href=\"\/tech-blog\/59520\">\u8a18\u4e8b<\/a>\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API Security Profile 1.0 - Part 1: Advance \u306e\u52d5\u304d\u3092\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>FAPI Advance \u3067\u306f \u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u306e\u6b63\u5f53\u306a\u6240\u6709\u8005\u3067\u3042\u308b\u3053\u3068\u306e\u8a3c\u660e(Proof of Possession = PoP)\u306e\u65b9\u6cd5\u3068\u3057\u3066MTLS\u306e\u6319\u52d5\u3092\u78ba\u8a8d\u3057\u305f\u306e\u3067\u3059\u304c\u3001\u4eca\u56de\u306e\u8a18\u4e8b\u3067\u306f\u305d\u306e\u4ed6\u306ePoP\u306e\u4ed5\u69d8\u3068\u3057\u3066 DPoP(OAuth 2.0 Demonstrating Proof of Possession) \u3092\u8a66\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"11-%E6%9C%AC%E8%A8%98%E4%BA%8B%E5%86%85%E3%81%A7%E3%81%AE%E7%95%A5%E7%A7%B0%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6\">1.1 \u672c\u8a18\u4e8b\u5185\u3067\u306e\u7565\u79f0\u306b\u3064\u3044\u3066<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u672c\u8cc7\u6599\u3067\u306f\u4ee5\u964d\u306e\u8cc7\u6599\u306b\u304a\u3044\u3066\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306b\u540d\u79f0\u3092\u7701\u7565\u3057\u3066\u8868\u8a18\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u540d\u79f0<\/th><th>\u7565\u79f0<\/th><\/tr><\/thead><tbody><tr><td>OAuth 2.0 Demonstrating Proof of Possession<\/td><td>DPoP<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"12-%E5%BD%93%E8%A8%98%E4%BA%8B%E3%81%A7%E8%AA%AC%E6%98%8E%E3%81%99%E3%82%8B%E5%86%85%E5%AE%B9\">1.2 \u5f53\u8a18\u4e8b\u3067\u8aac\u660e\u3059\u308b\u5185\u5bb9<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u4eca\u56de\u306e\u8a18\u4e8b\u3067\u306f\u4e3b\u306b\u4e0b\u8a18\u306e\u90e8\u5206\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keycloak \u3092\u7528\u3044\u3066\u306e DPoP \u306e\u6319\u52d5<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"13-%E5%BD%93%E8%A8%98%E4%BA%8B%E3%81%A7%E8%AA%AC%E6%98%8E%E3%81%97%E3%81%AA%E3%81%84%E5%86%85%E5%AE%B9\">1.3 \u5f53\u8a18\u4e8b\u3067\u8aac\u660e\u3057\u306a\u3044\u5185\u5bb9<\/h3>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<ul class=\"wp-block-list\">\n<li>FAPI \u306b\u95a2\u3059\u308b\u8a73\u7d30\u306a\u8aac\u660e<\/li>\n\n\n\n<li>MTLS \u306b\u95a2\u3059\u308b\u8a73\u7d30\u306a\u8aac\u660e \u203b&nbsp;<a href=\"\/tech-blog\/59520#index6.4\">\u524d\u56de\u306e\u8a18\u4e8b<\/a>\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2-%E4%BB%8A%E5%9B%9E%E3%81%AE%E6%A4%9C%E8%A8%BC%E7%92%B0%E5%A2%83\">2. \u4eca\u56de\u306e\u691c\u8a3c\u74b0\u5883<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>\u5148\u6708\u306e<a href=\"https:\/\/www.keycloak.org\/docs\/latest\/release_notes\/index.html#dpop-preview-support\">Keycloak\u306e\u30ea\u30ea\u30fc\u30b9\u3000(23.0.0)<\/a>\u3067\u3064\u3044\u306b DPoP\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u3067\u306e\u5bfe\u5fdc\u304c\u767a\u8868\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>DPoP preview support Keycloak has preview for support for OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP). Thanks to Takashi Norimatsu and Dmitry Telegin for their contributions.<\/p>\n<\/blockquote>\n\n\n\n<p><a href=\"https:\/\/www.keycloak.org\/docs\/latest\/server_admin\/index.html#con-advanced-settings_server_administration_guide\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u306b\u3082\u3042\u308b\u3088\u3046\u306b\u3001<code>--features=preview<\/code>&nbsp;\u307e\u305f\u306f&nbsp;<code>--features=dpop<\/code>&nbsp;\u3092\u30b5\u30fc\u30d0\u30fc\u8d77\u52d5\u6642\u306b\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4eca\u56de\u306fKeycloak\u306e<a href=\"https:\/\/www.keycloak.org\/server\/features#_relevant_options\">\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u306b\u3082\u3042\u308b\u3088\u3046\u306b\u3001KC_FEATURES \u306e\u74b0\u5883\u5909\u6570\u3092\u7528\u3044\u3066docker \u74b0\u5883\u3067\u6709\u52b9\u5316\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">      KC_FEATURES: dpop\n<\/pre>\n\n\n\n<p>\u4e0a\u8a18\u306e\u6a5f\u80fd(feature)\u3092\u6709\u52b9\u5316\u3059\u308b\u6307\u5b9a\u3092\u542b\u3093\u3060 docker-compose.yml \u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">services:\n  keycloak:\n    container_name: keycloak\n    image: quay.io\/keycloak\/keycloak:23.0.3\n    entrypoint: [\"\/opt\/keycloak\/bin\/kc.sh\",\"start-dev\"]\n    ports:\n      - \"8088:8080\"\n    environment:\n      KEYCLOAK_ADMIN: admin\n      KEYCLOAK_ADMIN_PASSWORD: password\n      KC_FEATURES: dpop\n<\/pre>\n\n\n\n<p>\u3067\u306f\u4e0b\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u52d5\u304b\u3057\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002&nbsp;<code>$ docker-compose up<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"21-%E6%A4%9C%E8%A8%BC%E3%81%A7%E4%BD%BF%E3%81%86%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%BD%9C%E6%88%90\">2.1 \u691c\u8a3c\u3067\u4f7f\u3046\u30c7\u30fc\u30bf\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u691c\u8a3c\u3067\u4f7f\u3046\u3001\u30ec\u30eb\u30e0\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3001\u30e6\u30fc\u30b6\u30fc\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306a\u30c7\u30fc\u30bf\u3092\u7528\u3044\u3066\u691c\u8a3c\u3057\u3066\u3044\u304d\u307e\u3059\u3002Keycloak\u306e\u7ba1\u7406\u753b\u9762\u3092\u958b\u3044\u3066\u5404\u7a2e\u30c7\u30fc\u30bf\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"%E3%83%AC%E3%83%AB%E3%83%A0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF\">\u30ec\u30eb\u30e0\u306e\u30c7\u30fc\u30bf<\/h4>\n\n\n\n<p>\u30ec\u30eb\u30e0\u540d\u306f\u4e0b\u8a18\u306e\u5024\u3068\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30ec\u30eb\u30e0\u306e\u4f5c\u308a\u65b9\u306b\u3064\u3044\u3066\u306f<a href=\"https:\/\/www.keycloak.org\/docs\/latest\/server_admin\/index.html#proc-creating-a-realm_server_administration_guide\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>Realm name<\/td><td>sample-realm<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF\">\u30e6\u30fc\u30b6\u30fc\u306e\u30c7\u30fc\u30bf<\/h4>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u306e\u30c7\u30fc\u30bf\u306b\u3064\u3044\u3066\u306f\u4e0b\u8a18\u306e\u30c7\u30fc\u30bf\u3067\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u308a\u65b9\u306b\u3064\u3044\u3066\u306f<a href=\"https:\/\/www.keycloak.org\/docs\/latest\/server_admin\/index.html#proc-creating-user_server_administration_guide\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>Username<\/td><td>cl-taro<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u307e\u305f\u3001\u30e6\u30fc\u30b6\u30fc\u306e Credentials \u306b\u3064\u3044\u3066\u306f\u4eca\u56de\u3082\u4e0b\u8a18\u306e\u3088\u3046\u306b\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>Password<\/td><td>password<\/td><\/tr><tr><td>Temporary<\/td><td>Off<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF\">\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30c7\u30fc\u30bf<\/h4>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306bClient ID\u3068Valid redirect URIs\u306e\u307f\u3092\u5165\u529b\u3057\u3001 \u305d\u308c\u4ee5\u5916\u306e\u5024\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306e\u307e\u307e\u3068\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u308a\u65b9\u306b\u3064\u3044\u3066\u306f<a href=\"https:\/\/www.keycloak.org\/docs\/latest\/server_admin\/index.html#proc-creating-oidc-client_server_administration_guide\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>Client Type<\/td><td>OpenID Connect (default\u306e\u5024)<\/td><\/tr><tr><td>Client ID<\/td><td>test-client<\/td><\/tr><tr><td>Valid redirect URIs<\/td><td><a href=\"https:\/\/client.example.com\/test\">https:\/\/client.example.com\/test<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"3-dpop%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96\">3 DPoP\u306e\u6709\u52b9\u5316<\/h2>\n\n\n\n<p>KC_FEATURES \u3067 DPoP\u81ea\u4f53\u3092\u6709\u52b9\u5316\u3057\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306fDPoP\u3092\u5f37\u5236\u3055\u305b\u308b\u52d5\u304d\u306f\u3057\u307e\u305b\u3093\u3002\u306a\u306e\u3067\u6b21\u306e\u9806\u3067\u691c\u8a3c\u3092\u884c\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>DPoP\u306e\u8a2d\u5b9a\u524d: \u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8<\/li>\n\n\n\n<li>DPoP\u306e\u8a2d\u5b9a\u5f8c: DPoP\u306e\u60c5\u5831\u3092\u542b\u307e\u305a\u306b\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8<\/li>\n\n\n\n<li>DPoP\u306e\u8a2d\u5b9a\u5f8c: DPoP\u306e\u60c5\u5831\u3092\u542b\u3093\u3067\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"31-dpop%E3%81%AE%E8%A8%AD%E5%AE%9A%E5%89%8D-%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88\">3.1 DPoP\u306e\u8a2d\u5b9a\u524d: \u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8<\/h3>\n\n\n\n<p>\u307e\u305a\u306f\u4f55\u3082\u8a2d\u5b9a\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u307e\u305a\u306f\u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest\">http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest<\/a><\/li>\n<\/ul>\n\n\n\n<p>\u30ed\u30b0\u30a4\u30f3\u753b\u9762\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3067\u30012.2 \u3067\u4f5c\u6210\u3057\u305f\u30e6\u30fc\u30b6\u30fc\u3067 Sign in \u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>Username<\/td><td>cl-taro<\/td><\/tr><tr><td>Password<\/td><td>password<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b redirect URIs \u306b\u767b\u9332\u3057\u305fURI\u306b\u9077\u79fb\u3057\u307e\u3059\u3002\u8a8d\u53ef\u30b3\u30fc\u30c9\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">https:\/\/client.example.com\/test?state=abcdefghijk&amp;session_state=51d9a57d-fd9c-4c94-bdb6-99605a7f8f64&amp;iss=http%3A%2F%2Flocalhost%3A8088%2Frealms%2Fsample-realm&amp;code=fb03522f-7ef5-47ba-8cb0-a91457a1b6e8.51d9a57d-fd9c-4c94-bdb6-99605a7f8f64.4ae28041-1079-4e8d-9e7f-ad0c4841c994\n<\/pre>\n\n\n\n<p>\u53d6\u5f97\u3057\u305f\u8a8d\u53ef\u30b3\u30fc\u30c9\u3092\u5143\u306b\u3001DPoP\u3092\u542b\u307e\u306a\u3044\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u3066\u9001\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -i -X POST \\\n-H \"Content-Type:application\/x-www-form-urlencoded\" \\\n-d \"client_id=test-client\" \\\n-d \"grant_type=authorization_code\" \\\n-d \"code=fb03522f-7ef5-47ba-8cb0-a91457a1b6e8.51d9a57d-fd9c-4c94-bdb6-99605a7f8f64.4ae28041-1079-4e8d-9e7f-ad0c4841c994\" \\\n-d \"redirect_uri=https:\/\/client.example.com\/test\" \\\n'http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/token'\n<\/pre>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3084\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u30c8\u30fc\u30af\u30f3\u306a\u3069\u304c\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"access_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMwMzAxNjYsImlhdCI6MTcwMzAyOTg2NiwiYXV0aF90aW1lIjoxNzAzMDI4OTIwLCJqdGkiOiI2MDViZTRkNi1lODUzLTQ0YzktYmZmYy1iMGQ3NTY0MDJlNjMiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiIxZDMzZjc5Yy01NTU5LTQxZGYtOTZkZS03ZGJlYjIzM2YxM2YiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0ZXN0LWNsaWVudCIsIm5vbmNlIjoiYWJjZGVmZ2hpamsiLCJzZXNzaW9uX3N0YXRlIjoiNTFkOWE1N2QtZmQ5Yy00Yzk0LWJkYjYtOTk2MDVhN2Y4ZjY0IiwiYWNyIjoiMCIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwczovL2NsaWVudC5leGFtcGxlLmNvbSJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1zYW1wbGUtcmVhbG0iLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNpZCI6IjUxZDlhNTdkLWZkOWMtNGM5NC1iZGI2LTk5NjA1YTdmOGY2NCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiY2wtdGFybyJ9.MC5Y-43UQ-qce_pSQTDFmcSvim6Qe-WZKGntzaOQxAPgzcCuevri6fdZMfYgmV7xY8R8oCnE2oAZEiHv0OSgAWrsElohLoRhQXVb8zdX6X3FrSXu7f2GAqV0Tb7CpDV5GtoEgROIRDrczQxQQu3uPvAAR47KCe4dJB2VzQbBhHo_TPASxS3gmmnMtMuJnGwAZ_AQ-2Qsc9GnYSedvKEYpGlteeOySRD_jbyUZhlFLyoCUWCSMknbrRxDm1G4XtoLmGgYjIK-UiLlShw6m3rk9NJPiyvzEXkiedjUPfDQ6veY1OB37mBnJmMosYRSPjFUulf2M43WnB9MToYF7NP_Gw\",\"expires_in\":300,\"refresh_expires_in\":1777,\"refresh_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJkODAyNDZlZS1lMmM0LTQwNWEtODZjMC01OTc5NDJmY2M5ZmYifQ.eyJleHAiOjE3MDMwMzE2NDMsImlhdCI6MTcwMzAyOTg2NiwianRpIjoiOGQ3ODc3ZWYtZWZmZC00YzExLTk1MDctZDNiMWUyZDE2YzBjIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDg4L3JlYWxtcy9zYW1wbGUtcmVhbG0iLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsInN1YiI6IjFkMzNmNzljLTU1NTktNDFkZi05NmRlLTdkYmViMjMzZjEzZiIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJ0ZXN0LWNsaWVudCIsIm5vbmNlIjoiYWJjZGVmZ2hpamsiLCJzZXNzaW9uX3N0YXRlIjoiNTFkOWE1N2QtZmQ5Yy00Yzk0LWJkYjYtOTk2MDVhN2Y4ZjY0Iiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNpZCI6IjUxZDlhNTdkLWZkOWMtNGM5NC1iZGI2LTk5NjA1YTdmOGY2NCJ9.b33RyYHQ_c5rXnCBsPWt_M61RcfDc136DfCyXodQRzc\",\"token_type\":\"Bearer\",\"id_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMwMzAxNjYsImlhdCI6MTcwMzAyOTg2NiwiYXV0aF90aW1lIjoxNzAzMDI4OTIwLCJqdGkiOiI2NWM2NWE5MC03NjBjLTQ2NTEtOGQxZi05MTIwNGNmM2FhNzMiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsImF1ZCI6InRlc3QtY2xpZW50Iiwic3ViIjoiMWQzM2Y3OWMtNTU1OS00MWRmLTk2ZGUtN2RiZWIyMzNmMTNmIiwidHlwIjoiSUQiLCJhenAiOiJ0ZXN0LWNsaWVudCIsIm5vbmNlIjoiYWJjZGVmZ2hpamsiLCJzZXNzaW9uX3N0YXRlIjoiNTFkOWE1N2QtZmQ5Yy00Yzk0LWJkYjYtOTk2MDVhN2Y4ZjY0IiwiYXRfaGFzaCI6Ijh2V1RmdUkwQzIwNG1xVldQcXhZT1EiLCJhY3IiOiIwIiwic2lkIjoiNTFkOWE1N2QtZmQ5Yy00Yzk0LWJkYjYtOTk2MDVhN2Y4ZjY0IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjbC10YXJvIn0.KtBj2401Folm1RokN_JsBaNhabQbGIVnPaO5Hrn5QOeD3-AqrQzWgRp4NeTmus3Mq7sq5XyL8GltE8YoRnbZ6nOQ0GJ95zMGlrN62Fqp-En-YTmpmFCIJFao-U-mGdVASKOR4KSYlVVEQcM3I6tl9RSTM50a3IR3QPf0cDdoetmnhZMbya31-L-ajEGw9VIGyEHUrX9V4QgecQkuPBWCTwD9g7HEErvIk8LtU-k3ktmtJRXtizr7ccqJyNsEfdflxTmE5B8yMcC-AIuuRs52qnIVJVbUt9cWD5vj8EfUz_eqgop_JlL9jpQUO4ho4wyxQSwPvKxGb-7bqjhsTlI-jA\",\"not-before-policy\":0,\"session_state\":\"51d9a57d-fd9c-4c94-bdb6-99605a7f8f64\",\"scope\":\"openid profile email\"}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"32-%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%ABdpop%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E8%A1%8C%E3%81%86\">3.2 \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306bDPoP\u306e\u8a2d\u5b9a\u3092\u884c\u3046<\/h3>\n\n\n\n<p>\u3067\u306f\u6b21\u306b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306bDPoP\u3092\u6709\u52b9\u5316\u3057\u305f\u72b6\u614b\u3092\u898b\u3066\u3044\u304f\u305f\u3081\u306b\u3001DPoP\u306e\u8a2d\u5b9a\u3092\u884c\u3063\u3066\u3044\u304d\u307e\u3059\u3002\u7ba1\u7406\u753b\u9762\u3088\u308a\u30012.2\u3067\u4f5c\u6210\u3057\u305f test-client\u306e\u8a2d\u5b9a\u753b\u9762\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u8a2d\u5b9a\u753b\u9762\u3088\u308a Advanced \u30bf\u30d6\u306b\u79fb\u52d5\u3057\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306b\u3001\"Advanced settings\" \u306e\u9805\u76ee\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002\u305d\u306e\u4e2d\u306b \"OAuth 2.0 DPoP Bound Access Tokens Enabled\" \u304c\u3042\u308b\u306e\u3067\u3001\u3053\u308c\u3092 \"Off\" \u304b\u3089 \"On\" \u306b\u5909\u66f4\u3057 \"Save\" \u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"607\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting-1024x607.png\" alt=\"\" class=\"wp-image-68705\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting-1024x607.png 1024w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting-360x213.png 360w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting-768x455.png 768w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png 1144w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u307e\u305f\u3001<a href=\"https:\/\/www.keycloak.org\/docs\/latest\/server_admin\/index.html#con-advanced-settings_server_administration_guide\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\u306b\u3082\u3042\u308b\u3088\u3046\u306b\u3001 \"OAuth 2.0 DPoP Bound Access Tokens Enabled\" \u306e\u8a2d\u5b9a\u304c \"Off\" \u306e\u307e\u307e\u3067\u3082 DPoP \u306eJWT\u3092\u542b\u3093\u3060\u60c5\u5831\u306f\u51e6\u7406\u3055\u308c\u307e\u3059\u3002 \u305f\u3060\u3057 \"On\" \u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067 DPoP\u306e\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u5f37\u5236\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">If the switch OAuth 2.0 DPoP Bound Access Tokens Enabled is off, the client can still send DPoP proof in the token request. In that case, Keycloak will verify DPoP proof and will add the thumbprint to the token. But if the switch is off, DPoP binding is not enforced by the Keycloak server for this client. It is recommended to have this switch on if you want to make sure that particular client always uses DPoP binding.\n<\/pre>\n\n\n\n<p>\u30a4\u30e1\u30fc\u30b8\u3068\u3057\u3066\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u8a2d\u5b9a\u5024<\/th><th>DPoP\u3092\u542b\u3093\u3060\u30ea\u30af\u30a8\u30b9\u30c8<\/th><th>DPoP\u3092\u542b\u3093\u3067\u3044\u306a\u3044\u30ea\u30af\u30a8\u30b9\u30c8<\/th><\/tr><\/thead><tbody><tr><td>On<\/td><td>\u51e6\u7406\u3055\u308c\u308b<\/td><td>DPoP\u304c\u306a\u3044\u306e\u3067\u30a8\u30e9\u30fc\u306b\u306a\u308b<\/td><\/tr><tr><td>Off<\/td><td>\u51e6\u7406\u3055\u308c\u308b<\/td><td>\u51e6\u7406\u3055\u308c\u308b<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"33-dpop%E3%81%AE%E8%A8%AD%E5%AE%9A%E5%BE%8C-dpop%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%90%AB%E3%81%BE%E3%81%9A%E3%81%AB%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88\">3.3 DPoP\u306e\u8a2d\u5b9a\u5f8c: DPoP\u306e\u60c5\u5831\u3092\u542b\u307e\u305a\u306b\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8<\/h3>\n\n\n\n<p>\u3067\u306fDPoP\u3092\u5f37\u5236\u3059\u308b\u8a2d\u5b9a\u3092\u884c\u3063\u305f\u306e\u3067\u3001\u307e\u305a\u306fDPoP\u3092\u542b\u307e\u305a\u306b\u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest\">http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest<\/a><\/li>\n<\/ul>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">https:\/\/client.example.com\/test?state=abcdefghijk&amp;session_state=038267e1-46ac-4e63-b2d0-036c89718264&amp;iss=http%3A%2F%2Flocalhost%3A8088%2Frealms%2Fsample-realm&amp;code=1ebfb4ee-5fd7-47db-88fa-7bc5fd165d21.038267e1-46ac-4e63-b2d0-036c89718264.4ae28041-1079-4e8d-9e7f-ad0c4841c994\n<\/pre>\n\n\n\n<p>\u53d6\u5f97\u3057\u305f\u8a8d\u53ef\u30b3\u30fc\u30c9\u3092\u5143\u306b\u3001DPoP\u3092\u542b\u307e\u306a\u3044\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -i -X POST \\\n-H \"Content-Type:application\/x-www-form-urlencoded\" \\\n-d \"client_id=test-client\" \\\n-d \"grant_type=authorization_code\" \\\n-d \"code=1ebfb4ee-5fd7-47db-88fa-7bc5fd165d21.038267e1-46ac-4e63-b2d0-036c89718264.4ae28041-1079-4e8d-9e7f-ad0c4841c994\" \\\n-d \"redirect_uri=https:\/\/client.example.com\/test\" \\\n'http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/token'\n<\/pre>\n\n\n\n<p>DPoP\u306e\u8a2d\u5b9a\u304c\u5165\u3063\u3066\u3044\u308b\u306e\u3067\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306aDPoP proof\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u3068\u3044\u3046\u30a8\u30e9\u30fc\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"error\":\"invalid_dpop_proof\",\"error_description\":\"DPoP proof is missing\"}\n<\/pre>\n\n\n\n<p>\u6b21\u306e\u7ae0\u304b\u3089DPoP\u306e\u60c5\u5831\u3092\u542b\u3093\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3044\u305f\u3044\u306e\u3067\u3059\u304c\u3001\u305d\u306e\u524d\u306bDPoP\u306b\u3064\u3044\u3066\u7406\u89e3\u3057\u3066\u304a\u304f\u305f\u3081\u306b\u7c21\u5358\u306b\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"34-what-is-dpop\">3.4 What is DPoP?<\/h3>\n\n\n\n<p>DPoP\u306f<a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9449\">RFC9449: OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP)<\/a>&nbsp;\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u62e1\u5f35\u6a5f\u80fd\u3067\u3001\u30c8\u30fc\u30af\u30f3\u3092\u767a\u884c\u3059\u308b\u969b\u306b\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3068\u516c\u958b\u9375\u3092\u7d10\u3065\u3051\u3001\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u5bfe\u5fdc\u3059\u308b\u79d8\u5bc6\u9375\u3092\u6240\u6709\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u8a3c\u660e\u3059\u308b\u3053\u3068\u3092\u8981\u6c42\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u6f0f\u6d29\u307e\u305f\u306f\u76d7\u96e3\u3055\u308c\u305f\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u304c\u4f7f\u7528\u3055\u308c\u308b\u3053\u3068\u3092\u9632\u3050\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u305f\u4ed5\u69d8\u3067\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9449\">RFC9449: OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP)<\/a>\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u4e0b\u8a18\u306e\u56f3\u3092\u30d9\u30fc\u30b9\u306b\u8aac\u660e\u3059\u308b\u3068\u3001\u304a\u304a\u307e\u304b\u306b\u4e0b\u8a18\u306e\u3088\u3046\u306a\u6d41\u308c\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A: \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u6642\u306b DPoP\u30d8\u30c3\u30c0\u30fc\u3092\u542b\u3081\u3066\u9001\u4fe1\u3002<\/li>\n\n\n\n<li>B: \u8a8d\u53ef\u30b5\u30fc\u30d0\u30fc\u306fDPoP\u30d8\u30c3\u30c0\u30fc\u306b\u542b\u307e\u308c\u308b\u7f72\u540d\u306e\u691c\u8a3c\u3001\u53ca\u3073JWT\u306e\u78ba\u8a8d\u306a\u3069\u3092\u884c\u3044\u3001<br>\u554f\u984c\u304c\u306a\u3051\u308c\u3070\u3001DPoP\u306e\u516c\u958b\u9375\u3092\u7d10\u3065\u3051\u305f\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u8fd4\u3059<\/li>\n\n\n\n<li>C: \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306fDPoP\u30d8\u30c3\u30c0\u30fc\u3068\u3001\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u7528\u3044\u3066\u30ea\u30bd\u30fc\u30b9\u3078\u30a2\u30af\u30bb\u30b9\u3002<\/li>\n\n\n\n<li>D: \u30ea\u30bd\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u306fDPoP\u30d8\u30c3\u30c0\u30fc\u306b\u542b\u307e\u308c\u308b\u7f72\u540d\u306e\u691c\u8a3c\u3001\u53ca\u3073JWT\u306e\u78ba\u8a8d\u3001<br>Authroization\u30d8\u30c3\u30c0\u30fc\u3067\u6e21\u3055\u308c\u308b\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u30cf\u30c3\u30b7\u30e5\u5024\u306e\u78ba\u8a8d\u306a\u3069\u3092\u884c\u3044\u3001<br>\u554f\u984c\u306a\u3051\u308c\u3070\u30ea\u30bd\u30fc\u30b9\u3092\u8fd4\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">+--------+                                          +---------------+\n|        |--(A)-- Token Request ------------------->|               |\n| Client |        (DPoP Proof)                      | Authorization |\n|        |                                          |     Server    |\n|        |&lt;-(B)-- DPoP-Bound Access Token ----------|               |\n|        |        (token_type=DPoP)                 +---------------+\n|        |\n|        |\n|        |                                          +---------------+\n|        |--(C)-- DPoP-Bound Access Token --------->|               |\n|        |        (DPoP Proof)                      |    Resource   |\n|        |                                          |     Server    |\n|        |&lt;-(D)-- Protected Resource ---------------|               |\n|        |                                          +---------------+\n+--------+\n<\/pre>\n\n\n\n<p>D\u306e\u6d41\u308c\u306b\u3064\u3044\u3066\u306f\u8a73\u7d30\u306f RFC9449 \u306e&nbsp;<a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9449#name-checking-dpop-proofs\">4.3. Checking DPoP Proofs<\/a>&nbsp;\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"35-dpop%E5%90%AB%E3%82%81%E3%81%9F%E6%A4%9C%E8%A8%BC%E3%81%AE%E7%A2%BA%E8%AA%8D\">3.5 DPoP\u542b\u3081\u305f\u691c\u8a3c\u306e\u78ba\u8a8d<\/h3>\n\n\n\n<p>\u3067\u306fDPoP\u3092\u542b\u3081\u3066\u691c\u8a3c\u3092\u9032\u3081\u3066\u3044\u304d\u307e\u3059\u3002\u307e\u305a\u306f\u518d\u5ea6\u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest\">http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest<\/a><\/li>\n<\/ul>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u307e\u3057\u305f\u3002\u00a0<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/client.example.com\/test?state=abcdefghijk&amp;session_state=cbd848c4-69f8-45e7-8034-7e9b08173a27&amp;iss=http%3A%2F%2Flocalhost%3A8088%2Frealms%2Fsample-realm&amp;code=7288a42e-2f0b-41c6-ad63-71084f8374fc.cbd848c4-69f8-45e7-8034-7e9b08173a27.4f71f2ad-20d1-4a2d-a692-bc78b05ae228\">https:\/\/client.example.com\/test?state=abcdefghijk&amp;session_state=cbd848c4-69f8-45e7-8034-7e9b08173a27&amp;iss=http%3A%2F%2Flocalhost%3A8088%2Frealms%2Fsample-realm&amp;code=7288a42e-2f0b-41c6-ad63-71084f8374fc.cbd848c4-69f8-45e7-8034-7e9b08173a27.4f71f2ad-20d1-4a2d-a692-bc78b05ae228<\/a><\/li>\n<\/ul>\n\n\n\n<p>\u6b21\u306b\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3046\u306e\u3067\u3059\u304c\u3001DPoP\u306fDPoP Proof\u3068\u3044\u3046\u6982\u5ff5\u3092\u5c0e\u5165\u3057\u3066\u304a\u308a\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u7528\u610f\u3057\u305f\u79d8\u5bc6\u9375\u3067\u7f72\u540d\u3055\u308c\u305fJWT(=JWS)\u3092\u30d8\u30c3\u30c0\u30fc\u3067HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u4e00\u7dd2\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9449\">RFC9449: OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP)<\/a>\u3067\u3044\u3046A\u306e\u7b87\u6240\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">+--------+                                          +---------------+\n|        |--(A)-- Token Request ------------------->|               |\n| Client |        (DPoP Proof)                      | Authorization |\n|        |                                          |     Server    |\n|        |&lt;-(B)-- DPoP-Bound Access Token ----------|               |\n|        |        (token_type=DPoP)                 +---------------+\n|        |\n|        |\n|        |                                          +---------------+\n|        |--(C)-- DPoP-Bound Access Token --------->|               |\n|        |        (DPoP Proof)                      |    Resource   |\n|        |                                          |     Server    |\n|        |&lt;-(D)-- Protected Resource ---------------|               |\n|        |                                          +---------------+\n+--------+\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"36-jws%E3%81%AB%E4%BD%BF%E3%81%86%E9%8D%B5%E6%83%85%E5%A0%B1%E3%81%AE%E4%BD%9C%E6%88%90\">3.6 JWS\u306b\u4f7f\u3046\u9375\u60c5\u5831\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u6b21\u306b\u3001\u9375\u60c5\u5831\u3068 JWKS \u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3059\u304c\u3001\u4eca\u56de\u306f mkjwk.org \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u3092\u4f7f\u3063\u3066\u307f\u307e\u3059\u3002\u307e\u305a\u306f\u753b\u9762\u53f3\u4e0a\u304b\u3089\u65e5\u672c\u8a9e\u306b\u8a00\u8a9e\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>\u8a72\u5f53\u30da\u30fc\u30b8\u3092\u958b\u3051\u305f\u3089\u3001\u30bf\u30d6\u304c \"RSA\" \u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306f\u4e0b\u8a18\u3092\u6307\u5b9a\u3057\u305f\u5f8c\u306b\u3001\"\u751f\u6210\u3059\u308b\" \u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9\u540d<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>\u9375\u306e\u30b5\u30a4\u30ba<\/td><td>2048<\/td><\/tr><tr><td>\u9375\u306e\u7528\u9014<\/td><td>\u7f72\u540d<\/td><\/tr><tr><td>\u9375\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0<\/td><td>PS256: RSASSA-PSS using SHA-256 and MGF1 with SHA-256<\/td><\/tr><tr><td>\u9375\u306eID<\/td><td>test \u203b\u30c7\u30d5\u30a9\u30eb\u30c8\u306eSpecify\u306e\u72b6\u614b\u306e\u307e\u307e test \u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044<\/td><\/tr><tr><td>Show X.509<\/td><td>Yes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b \u516c\u958b\u9375\u30fb\u79d8\u5bc6\u9375\u30fb JWKS \u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"737\" height=\"855\" src=\"\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/mkjwk-1.png\" alt=\"\" class=\"wp-image-68706\" srcset=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/mkjwk-1.png 737w, https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/mkjwk-1-310x360.png 310w\" sizes=\"auto, (max-width: 737px) 100vw, 737px\" \/><\/figure>\n\n\n\n<p>\u4eca\u56de\u306e\u691c\u8a3c\u3067\u306e\u516c\u958b\u9375\u306f\u3001\u4e00\u4f8b\u3068\u3057\u3066\u4e0b\u8a18\u306e\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCt6ctahD+z5YbE\nCa3Q+i+A\/kHzLEc20bz3\/E26DsdspMjFYuc7TSo9+KQTXljzQL2D7yMFnVkaak7x\n7CXC9YKHIk04g1+RKnMMmmrcAp5HjWVaWrKLnPO6OTvChneCOC251X7WV21NMtWz\ngrZZUroAtqATfm12l6wm0Nmd\/G85q+n14zdPMUGYKcNYze807m3VtCW\/KYo\/3EOk\nvsUIIz\/zGAah86k\/jaasKOWOxEBQ1pw0tjlvS\/Z5Ohoc62L6GfJjgFVWZ3bvYb6M\nIKGYA\/9YTJ1xkDoVPTqUnPKeqKKlghvB6fX6\/u\/BS8kOMFyEPKGquzz6a3NRyZQZ\nxxm43eLbAgMBAAECggEADlRtRRAQj6oh6JVDlSyILYDFvluvony1rVlErkf5dqI9\nSMZVdzVsfZ63JkFn4uM6ulxB7nyAkwSfbJ+gnOfN0YSqCDYK8dMll6xBkc9Fa2\/j\nIgbHH2nXS0jb+7NItZobamyE\/vRFNU8y\/I+QptuCJ\/zkQ7bvHg5xSOF8jN\/36jB0\nzdkWkgb+xE5\/c4nq7so3rIxdAvrDEq619\/3KUgX6bMZ6+YQxc32MOjPU5XMk19SI\nWiXNIvjgnjqjif1d9nUA+OdU+BJ896KCFhqx\/bILQL2w7b5qcypa202RMxLRrDit\nR6ryy7IVKKEhGP7UG62E\/GoNwGrKHJUa42kDgIpSgQKBgQD7wWy4YOai+HuzFIXN\n9WSiFt50c55RxSC7zXwULn4Kme9WOjv7Fl83oq\/51ln\/trIIzTYwnNqVik257eQW\nNWuLjKorJKjv1iwpSryieMKJBSefU8WJu3ST0hEr7SK\/9m3YL\/AZH\/kf4vtlDLCV\nIKhYhmu0T287Wzr8IIBLotEYeQKBgQCw2GcdsVidVFZGyJQN31dtXk+9dmkt+zeE\nfTKm\/46fB\/Rc9+Ae0NyG8TJr2WigaelnF\/F3h3GWc4J6gy5dp1ZwzJUId+7VgSa1\n17rXqR1jOtPAg3bdB0G6l6trpA7zy8qd0U0u1v+0Dc123jtFLyoPyDI6bGG9ff1c\nyOz43mbo8wKBgHeqDfJp5NbMA4gwlhU6shW1hxGVL0iwyYla98JkAvcpCjFTRtVn\nYeUBCGJZt7ercF5spHhg5ik0bxOUdtjzlWXke7I8H6y4gY8y\/gzAF7+nWpkJ6Zg5\nKQVmUVEuy1ixWq7qwlY+81xruJDkgj6wIjTJ2AIBy95L0\/KpxDGvd3IJAoGAPg4h\n2PyDYOnYQIxfz6JglmMyzgQAEn+F0rrwDEO+8zUiXYEppwaZa8y1abznhurDWUbA\nl7XyeN3dmknv+jMfFQPlBAy5xTfFsqeZy9VvF4PsDDDVg+fo+6X\/JA10pb4MQmbQ\nk7AkGDWDtMN0vuk29ETGw1OG1KyiPG3RId9A81sCgYA+YkaG+Cpl5ebaKxjI+Fp\/\nmnVOJ529vNFDXT\/79gz\/orFEMkGiSzq1PKe644y3kZfNW5IIBmMTLP0E+qn2WYJJ\n3M5jTZqsGpjQvNzAC71OPPy+JKUCziLBwD5phgUgQVzRf9nZVAHOvXmTLPKSnuyG\nsSRJ2eGWuE0rLcAOQbMdsg==\n-----END PRIVATE KEY-----\n<\/pre>\n\n\n\n<p>\u4eca\u56de\u306e\u691c\u8a3c\u3067\u306e\u79d8\u5bc6\u9375\u306f\u3001\u4e00\u4f8b\u3068\u3057\u3066\u4e0b\u8a18\u306e\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArenLWoQ\/s+WGxAmt0Pov\ngP5B8yxHNtG89\/xNug7HbKTIxWLnO00qPfikE15Y80C9g+8jBZ1ZGmpO8ewlwvWC\nhyJNOINfkSpzDJpq3AKeR41lWlqyi5zzujk7woZ3gjgtudV+1ldtTTLVs4K2WVK6\nALagE35tdpesJtDZnfxvOavp9eM3TzFBmCnDWM3vNO5t1bQlvymKP9xDpL7FCCM\/\n8xgGofOpP42mrCjljsRAUNacNLY5b0v2eToaHOti+hnyY4BVVmd272G+jCChmAP\/\nWEydcZA6FT06lJzynqiipYIbwen1+v7vwUvJDjBchDyhqrs8+mtzUcmUGccZuN3i\n2wIDAQAB\n-----END PUBLIC KEY-----\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"37-dpop%E3%81%AEjwt%E3%81%AE%E4%BD%9C%E6%88%90\">3.7 DPoP\u306eJWT\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u4eca\u56de\u306f Ruby \u3067 DPoP\u3067\u4f7f\u3046 JWS \u3092\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3059\u3002Ruby \u306e\u5b9f\u884c\u74b0\u5883\u306b\u3064\u3044\u3066\u306f Docker \u3067\u9069\u5f53\u306a Ruby \u30b3\u30f3\u30c6\u30ca\u3092\u4f5c\u6210\u3057\u3001 irb (Ruby \u30b3\u30f3\u30bd\u30fc\u30eb)\u3067\u4f5c\u696d\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u306f\u30b3\u30f3\u30c6\u30ca\u3092\u7acb\u3061\u4e0a\u3052\u3066\u63a5\u7d9a\u3057\u307e\u3059\u3002\u30a4\u30e1\u30fc\u30b8\u306fdocker\u516c\u5f0f\u306e\u3082\u306e\u3092\u4f7f\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>$ docker run -it --rm ruby:3.2.2 bash<\/code><\/p>\n\n\n\n<p>\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001\u30b3\u30de\u30f3\u30c9\u3092\u53d7\u3051\u4ed8\u3051\u308b\u72b6\u614b\u306b\u306a\u3063\u3066\u3044\u308b\u3068\u601d\u3044\u307e\u3059\u306e\u3067\u5f15\u304d\u7d9a\u304d\u3053\u306e\u74b0\u5883\u3067\u4f5c\u696d\u3092\u7d9a\u3051\u307e\u3059\u3002<\/p>\n\n\n\n<p>JWS\u306e\u4f5c\u6210\u306b\u306f JSON::JWT \u3068\u3044\u3046 gem \u3092\u4f7f\u3063\u3066\u3044\u304d\u307e\u3059\u3002\u4e0b\u8a18\u306e\u30b3\u30de\u30f3\u30c9\u3067 gem \u3092 install \u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p><code>$ gem install json-jwt<\/code><\/p>\n\n\n\n<p>grep \u30b3\u30de\u30f3\u30c9\u3067 gem \u304c\u5b58\u5728\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>$ gem list | grep json-jwt<\/code><\/p>\n\n\n\n<p>\u3067\u306f\u3053\u3053\u3067 irb ( Ruby \u30b3\u30f3\u30bd\u30fc\u30eb)\u3092\u958b\u3044\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><code>$ irb<\/code><\/p>\n\n\n\n<p>\u4ee5\u964d irb \u5185\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306f &gt; \u8a18\u53f7\u306e\u5f8c\u308d\u306b\u7d9a\u3051\u3066\u8a18\u8f09\u3057\u3066\u3044\u304d\u307e\u3059\u3002 \u3067\u306f JWT\u3092\u4f5c\u6210\u3057\u3066\u3044\u304f\u305f\u3081\u307e\u305a\u306f gem \u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> require 'json\/jwt'\n=> true\n<\/pre>\n\n\n\n<p>\u6b21\u306b\u79d8\u5bc6\u9375\u3092\u5909\u6570\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">private_key = OpenSSL::PKey::RSA.new &lt;&lt;-PEM\n-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCt6ctahD+z5YbE\nCa3Q+i+A\/kHzLEc20bz3\/E26DsdspMjFYuc7TSo9+KQTXljzQL2D7yMFnVkaak7x\n7CXC9YKHIk04g1+RKnMMmmrcAp5HjWVaWrKLnPO6OTvChneCOC251X7WV21NMtWz\ngrZZUroAtqATfm12l6wm0Nmd\/G85q+n14zdPMUGYKcNYze807m3VtCW\/KYo\/3EOk\nvsUIIz\/zGAah86k\/jaasKOWOxEBQ1pw0tjlvS\/Z5Ohoc62L6GfJjgFVWZ3bvYb6M\nIKGYA\/9YTJ1xkDoVPTqUnPKeqKKlghvB6fX6\/u\/BS8kOMFyEPKGquzz6a3NRyZQZ\nxxm43eLbAgMBAAECggEADlRtRRAQj6oh6JVDlSyILYDFvluvony1rVlErkf5dqI9\nSMZVdzVsfZ63JkFn4uM6ulxB7nyAkwSfbJ+gnOfN0YSqCDYK8dMll6xBkc9Fa2\/j\nIgbHH2nXS0jb+7NItZobamyE\/vRFNU8y\/I+QptuCJ\/zkQ7bvHg5xSOF8jN\/36jB0\nzdkWkgb+xE5\/c4nq7so3rIxdAvrDEq619\/3KUgX6bMZ6+YQxc32MOjPU5XMk19SI\nWiXNIvjgnjqjif1d9nUA+OdU+BJ896KCFhqx\/bILQL2w7b5qcypa202RMxLRrDit\nR6ryy7IVKKEhGP7UG62E\/GoNwGrKHJUa42kDgIpSgQKBgQD7wWy4YOai+HuzFIXN\n9WSiFt50c55RxSC7zXwULn4Kme9WOjv7Fl83oq\/51ln\/trIIzTYwnNqVik257eQW\nNWuLjKorJKjv1iwpSryieMKJBSefU8WJu3ST0hEr7SK\/9m3YL\/AZH\/kf4vtlDLCV\nIKhYhmu0T287Wzr8IIBLotEYeQKBgQCw2GcdsVidVFZGyJQN31dtXk+9dmkt+zeE\nfTKm\/46fB\/Rc9+Ae0NyG8TJr2WigaelnF\/F3h3GWc4J6gy5dp1ZwzJUId+7VgSa1\n17rXqR1jOtPAg3bdB0G6l6trpA7zy8qd0U0u1v+0Dc123jtFLyoPyDI6bGG9ff1c\nyOz43mbo8wKBgHeqDfJp5NbMA4gwlhU6shW1hxGVL0iwyYla98JkAvcpCjFTRtVn\nYeUBCGJZt7ercF5spHhg5ik0bxOUdtjzlWXke7I8H6y4gY8y\/gzAF7+nWpkJ6Zg5\nKQVmUVEuy1ixWq7qwlY+81xruJDkgj6wIjTJ2AIBy95L0\/KpxDGvd3IJAoGAPg4h\n2PyDYOnYQIxfz6JglmMyzgQAEn+F0rrwDEO+8zUiXYEppwaZa8y1abznhurDWUbA\nl7XyeN3dmknv+jMfFQPlBAy5xTfFsqeZy9VvF4PsDDDVg+fo+6X\/JA10pb4MQmbQ\nk7AkGDWDtMN0vuk29ETGw1OG1KyiPG3RId9A81sCgYA+YkaG+Cpl5ebaKxjI+Fp\/\nmnVOJ529vNFDXT\/79gz\/orFEMkGiSzq1PKe644y3kZfNW5IIBmMTLP0E+qn2WYJJ\n3M5jTZqsGpjQvNzAC71OPPy+JKUCziLBwD5phgUgQVzRf9nZVAHOvXmTLPKSnuyG\nsSRJ2eGWuE0rLcAOQbMdsg==\n-----END PRIVATE KEY-----\nPEM\n=> #&lt;OpenSSL::PKey::RSA:0x00007f07b1a12b78 oid=rsaEncryption>\n<\/pre>\n\n\n\n<p>\u305d\u3057\u3066\u516c\u958b\u9375\u3082\u5909\u6570\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> public_key = OpenSSL::PKey::RSA.new &lt;&lt;-PEM\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArenLWoQ\/s+WGxAmt0Pov\ngP5B8yxHNtG89\/xNug7HbKTIxWLnO00qPfikE15Y80C9g+8jBZ1ZGmpO8ewlwvWC\nhyJNOINfkSpzDJpq3AKeR41lWlqyi5zzujk7woZ3gjgtudV+1ldtTTLVs4K2WVK6\nALagE35tdpesJtDZnfxvOavp9eM3TzFBmCnDWM3vNO5t1bQlvymKP9xDpL7FCCM\/\n8xgGofOpP42mrCjljsRAUNacNLY5b0v2eToaHOti+hnyY4BVVmd272G+jCChmAP\/\nWEydcZA6FT06lJzynqiipYIbwen1+v7vwUvJDjBchDyhqrs8+mtzUcmUGccZuN3i\n2wIDAQAB\n-----END PUBLIC KEY-----\nPEM\n=> #&lt;OpenSSL::PKey::RSA:0x00007f07b191e668 oid=rsaEncryption>\n<\/pre>\n\n\n\n<p>\u6b21\u306b\u30da\u30a4\u30ed\u30fc\u30c9\u7528\u306e\u5909\u6570\u3092\u6e96\u5099\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> payload = {\n  'jti': SecureRandom.uuid,\n  'htm': 'POST',\n  'htu': 'http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/token',\n  'iat': Time.now.to_i,\n}\n=> \n{:jti=>\"89ced3ef-06d2-4c25-8dd0-9a9eec78f284\",\n<\/pre>\n\n\n\n<p>\u30da\u30a4\u30ed\u30fc\u30c9\u306e\u5024\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306a\u5024\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>jti<\/td><td>\u4e00\u610f\u306a\u8b58\u5225\u5b50<\/td><\/tr><tr><td>htm<\/td><td>DPoP Proof\u3092\u9001\u4fe1\u3059\u308b\u969b\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306eHTTP\u30e1\u30bd\u30c3\u30c9\u306e\u5024<\/td><\/tr><tr><td>htu<\/td><td>DPoP Proof\u3092\u9001\u4fe1\u3059\u308b\u969b\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306eHTTP \u30bf\u30fc\u30b2\u30c3\u30c8 URI<\/td><\/tr><tr><td>iat<\/td><td>DPoP Proof\u306eJWT\u306e\u4f5c\u6210\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u3067\u306f\u30da\u30a4\u30ed\u30fc\u30c9\u3092JWT\u5316\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> jwt = JSON::JWT.new payload\n=>\n{\"jti\"=>\"89ced3ef-06d2-4c25-8dd0-9a9eec78f284\",\n...\n<\/pre>\n\n\n\n<p>\u307e\u305f\u3001JWT\u306e\u30d8\u30c3\u30c0\u30fc\u3092DPoP\u306e\u6307\u5b9a\u306e\u3082\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> jwt.header[:typ] = \"dpop+jwt\"\n=> \"dpop+jwt\"\n<\/pre>\n\n\n\n<p>JWT\u306eheader\u90e8\u306b\u306f JWK \u3092\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081JWK\u3092\u4f5c\u6210\u3057\u3001JWT\u306eheader\u306e jwk \u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3068\u3057\u3066\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> jwk = JSON::JWK.new(public_key, kid:'test')\n=>\n{\"kty\"=>:RSA,\n...\n\n> jwt.header[:jwk] = jwk\n=>\n{\"kty\"=>:RSA,\n...\n<\/pre>\n\n\n\n<p>JWT\u306b\u7f72\u540d\u3057\u3066\u3001JWS \u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> signed_jwt = jwt.sign(private_key, :PS256)\n=>\n{\"jti\"=>\"89ced3ef-06d2-4c25-8dd0-9a9eec78f284\",\n...\n<\/pre>\n\n\n\n<p>\u4f5c\u6210\u3057\u305f JWS \u3092\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> signed_jwt.to_s\n=> \"eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IlBTMjU2IiwiandrIjp7Imt0eSI6IlJTQSIsImUiOiJBUUFCIiwibiI6InJlbkxXb1Ffcy1XR3hBbXQwUG92Z1A1Qjh5eEhOdEc4OV94TnVnN0hiS1RJeFdMbk8wMHFQZmlrRTE1WTgwQzlnLThqQloxWkdtcE84ZXdsd3ZXQ2h5Sk5PSU5ma1NwekRKcHEzQUtlUjQxbFdscXlpNXp6dWprN3dvWjNnamd0dWRWLTFsZHRUVExWczRLMldWSzZBTGFnRTM1dGRwZXNKdERabmZ4dk9hdnA5ZU0zVHpGQm1DbkRXTTN2Tk81dDFiUWx2eW1LUDl4RHBMN0ZDQ01fOHhnR29mT3BQNDJtckNqbGpzUkFVTmFjTkxZNWIwdjJlVG9hSE90aS1obnlZNEJWVm1kMjcyRy1qQ0NobUFQX1dFeWRjWkE2RlQwNmxKenlucWlpcFlJYndlbjEtdjd2d1V2SkRqQmNoRHlocXJzOC1tdHpVY21VR2NjWnVOM2kydyIsImtpZCI6InRlc3QifX0.eyJqdGkiOiI4OWNlZDNlZi0wNmQyLTRjMjUtOGRkMC05YTllZWM3OGYyODQiLCJodG0iOiJQT1NUIiwiaHR1IjoiaHR0cDovL2xvY2FsaG9zdDo4MDg4L3JlYWxtcy9zYW1wbGUtcmVhbG0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW4iLCJpYXQiOjE3MDMxNDc3MzR9.XCrth5RcAlyg0LMa0y8Bh3GSnkhsut3l3KIeTEmEaGUA-kCMBNp0t-NEdAjWUSx7EIiqzvsh3Z_RmUMo1AZggIHZlwx6Mhb0_-PsDgCjmZpBBJYXcpSHf3-HNmcMgoXVGHUQYJ2PfSthnswXkv7N2f0qRbngoPC4fUvW1kKj-3jV3OT0HqphvAqP_GKv4budGWmRbR9pJ5n-j-nxCvitptpGNL4v1FNeNTdixiSay7wnYPb0HTzo46CFVx_JX-MknYunudYQmNEE9HQWjLB9do8_zD3sEy_DRKrciRjZ4ZJx6vJSVt-Ot6oz9fiAav6EDVwJgYJ8iZSi9sWpHloTeg\"\n<\/pre>\n\n\n\n<p>\u74b0\u5883\u3054\u3068\u306b\u5024\u306f\u5909\u308f\u308a\u307e\u3059\u304c\u3001\u4e0a\u8a18\u306e\u3088\u3046\u306a JWS \u5f62\u5f0f\u306e\u6587\u5b57\u5217\u3092\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u3001\u3053\u308c\u3092\u30d8\u30c3\u30c0\u30fc\u3067\u6307\u5b9a\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"38-dpop-proof-%E3%81%A8%E5%85%B1%E3%81%AB%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88\">3.8 DPoP Proof \u3068\u5171\u306b\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8<\/h3>\n\n\n\n<p>DPoP\u3092\u7528\u3044\u3066\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u518d\u5ea6\u8a8d\u53ef\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3088\u308a\u8a8d\u53ef\u30b3\u30fc\u30c9\u3092\u518d\u53d6\u5f97\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest\">http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/auth?response_type=code&amp;scope=openid\u00a0email&amp;client_id=test-client&amp;nonce=abcdefghijk&amp;state=abcdefghijk&amp;redirect_uri=https%3A%2F%2Fclient.example.com%2Ftest<\/a><\/li>\n<\/ul>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u8fd4\u3063\u3066\u304d\u305f\u3082\u306e\u3068\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0<a href=\"https:\/\/client.example.com\/test?state=abcdefghijk&amp;session_state=7e04b333-e7a1-48e6-a38b-b2bcf1f70000&amp;iss=http%3A%2F%2Flocalhost%3A8088%2Frealms%2Fsample-realm&amp;code=8116bbc5-de56-4ec7-ba93-f2af2206855d.7e04b333-e7a1-48e6-a38b-b2bcf1f70000.4ae28041-1079-4e8d-9e7f-ad0c4841c994\">https:\/\/client.example.com\/test?state=abcdefghijk&amp;session_state=7e04b333-e7a1-48e6-a38b-b2bcf1f70000&amp;iss=http%3A%2F%2Flocalhost%3A8088%2Frealms%2Fsample-realm&amp;code=8116bbc5-de56-4ec7-ba93-f2af2206855d.7e04b333-e7a1-48e6-a38b-b2bcf1f70000.4ae28041-1079-4e8d-9e7f-ad0c4841c994<\/a><\/li>\n<\/ul>\n\n\n\n<p>\u4e0a\u8a18\u3067\u53d6\u5f97\u3057\u305f code \u306e\u7b87\u6240\u306e\u8a8d\u53ef\u30b3\u30fc\u30c9\u3068\u3001\u76f4\u8fd1\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u4f5c\u6210\u3057\u305f DPoP Proof \u3092\u30bb\u30c3\u30c8\u3057\u3066\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -i -X POST \\\n-H \"Content-Type:application\/x-www-form-urlencoded\" \\\n-H \"DPoP:eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IlBTMjU2IiwiandrIjp7Imt0eSI6IlJTQSIsImUiOiJBUUFCIiwibiI6InJlbkxXb1Ffcy1XR3hBbXQwUG92Z1A1Qjh5eEhOdEc4OV94TnVnN0hiS1RJeFdMbk8wMHFQZmlrRTE1WTgwQzlnLThqQloxWkdtcE84ZXdsd3ZXQ2h5Sk5PSU5ma1NwekRKcHEzQUtlUjQxbFdscXlpNXp6dWprN3dvWjNnamd0dWRWLTFsZHRUVExWczRLMldWSzZBTGFnRTM1dGRwZXNKdERabmZ4dk9hdnA5ZU0zVHpGQm1DbkRXTTN2Tk81dDFiUWx2eW1LUDl4RHBMN0ZDQ01fOHhnR29mT3BQNDJtckNqbGpzUkFVTmFjTkxZNWIwdjJlVG9hSE90aS1obnlZNEJWVm1kMjcyRy1qQ0NobUFQX1dFeWRjWkE2RlQwNmxKenlucWlpcFlJYndlbjEtdjd2d1V2SkRqQmNoRHlocXJzOC1tdHpVY21VR2NjWnVOM2kydyIsImtpZCI6InRlc3QifX0.eyJqdGkiOiI2ZjI3MjQ5NS1hZDQ1LTQ5MzItYmJjMi1kMzE2NjY0NTA3ZDEiLCJodG0iOiJQT1NUIiwiaHR1IjoiaHR0cDovL2xvY2FsaG9zdDo4MDg4L3JlYWxtcy9zYW1wbGUtcmVhbG0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvdG9rZW4iLCJpYXQiOjE3MDMxNTM1NTB9.RmtUCHCM_TJVTB9ms_CVY5J6XNCySjyZTDt_jk5QNA1u1oV6JtRxsXJEAzRDAQpE7KLyftKHwQi9c05vWFcaSRQhxUEvoxaVpM_ACbNF9BYDjHmd0cC0C7oXpUSTI5vB70EYetJGPqWFNJexB7rRHtU5IOPU-5MN6HcNo2oFJXfVFtgZA3edgmArHJp8037ciQ-FUAYudEv71yNC_gO3d1wb4YsE79_obk6xP8yQvITfROntzUSrlv3OxhO_Y98XKOxkUra-3XArmSqcmSjX1_mH7yeUXXW9i2fG8cY21CsayKaMrDiqcbblISoC1nkql3NKWjko2ULB060pknCOwg\" \\\n-d \"client_id=test-client\" \\\n-d \"grant_type=authorization_code\" \\\n-d \"code=8116bbc5-de56-4ec7-ba93-f2af2206855d.7e04b333-e7a1-48e6-a38b-b2bcf1f70000.4ae28041-1079-4e8d-9e7f-ad0c4841c994\" \\\n-d \"redirect_uri=https:\/\/client.example.com\/test\" \\\n'http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/token'\n<\/pre>\n\n\n\n<p>\u3067\u3059\u304c\u3001\u591a\u304f\u306e\u5834\u5408\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u304c\u5e30\u3063\u3066\u304d\u3066\u3044\u308b\u304b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"error\":\"invalid_dpop_proof\",\"error_description\":\"DPoP proof is not active\"}%\n<\/pre>\n\n\n\n<p>\u3053\u308c\u306f\u306a\u305c\u304b\u3068\u3044\u3046\u3068\u3001Keycloak \u306eDPoP Proof\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u51e6\u7406\u306e\uff11\u3064\u306e\u3001iat \u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u898b\u3066DPoP Proof \u304c\u53e4\u3059\u304e\u308b\u304b\u3001\u65b0\u3057\u3059\u304e\u308b\u3068\u30a8\u30e9\u30fc\u306b\u3059\u308b\u3068\u3044\u3046\u51e6\u7406\u304c\u3042\u308a\u307e\u3059\u3002DPoP Proof\u306eJWT\u3092\u4f5c\u6210\u3059\u308b\u969b\u306b\u3001\u4eca\u56de\u306e\u3088\u3046\u306b\u624b\u52d5\u3067\u4f5c\u6210\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u591a\u304f\u306e\u5834\u5408\u3072\u3063\u304b\u304b\u3063\u3066\u3057\u307e\u3046\u305f\u3081\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u5b9f\u969b\u306eKeycloak\u306e\u5b9f\u88c5\u7b87\u6240\u3067\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">        public boolean test(DPoP t) throws DPoPVerificationException {\n            long time = Time.currentTime();\n            Long iat = t.getIat();\n\n            if (!(iat &lt;= time + clockSkew &amp;&amp; iat > time - lifetime)) {\n                throw new DPoPVerificationException(t, \"DPoP proof is not active\");\n            }\n            return true;\n        }\n<\/pre>\n\n\n\n<p>\u57fa\u672c\u7684\u306b\u306f\u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u8a8d\u53ef\u30b3\u30fc\u30c9\u3092\u53d6\u5f97\u3057\u3066\u3001\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3059\u308b\u51e6\u7406\u306f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u304c\u6a5f\u68b0\u7684\u306b\u884c\u3046\u306e\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u4eca\u56de\u306f\u691c\u8a3c\u306e\u305f\u3081\u624b\u52d5\u3067\u3084\u3063\u3066\u3044\u308b\u306e\u3067\u4e0b\u8a18\u306e\u3088\u3046\u306b\u5c11\u3057\u30a4\u30ec\u30ae\u30e5\u30e9\u30fc\u306a\u5bfe\u5fdc\u3067\u7121\u7406\u3084\u308a\u9032\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u4fe1<\/li>\n\n\n\n<li>\u8a8d\u53ef\u30b3\u30fc\u30c9\u3092\u53d6\u5f97<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3059\u308b\u96db\u5f62(CURL\u6587)\u3092\u4f5c\u3063\u3066\u304a\u304f<\/li>\n\n\n\n<li>DPoP Proof \u3092\u4f5c\u6210<\/li>\n\n\n\n<li>DPoP Proof \u3092CURL\u6587\u306b\u57cb\u3081\u8fbc\u3093\u3067\u9001\u4fe1<\/li>\n<\/ol>\n\n\n\n<p>\u4e0a\u8a18\u306e4\u306e\u624b\u9806\u3067\u30014\u304b\u30895\u306e\u4f5c\u696d\u3067\u304b\u304b\u308b\u6642\u9593\u3092\u8003\u616e\u3057\u3066\u3001iat \u306e\u5024\u306f\u73fe\u5728\u6642\u9593 + 15\u79d2\u306a\u3069\u5909\u66f4\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002\u5177\u4f53\u7684\u306b\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b irb \u3067\u5165\u529b\u3057\u3001JWT\u3092\u4f5c\u6210\u3057\u3066CURL\u306b\u57cb\u3081\u8fbc\u3093\u3067\u9001\u4fe1\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">payload = {\n  'jti': SecureRandom.uuid,\n  'htm': 'POST',\n  'htu': 'http:\/\/localhost:8088\/realms\/sample-realm\/protocol\/openid-connect\/token',\n  'iat': (Time.now + 15).to_i,\n}\n\njwt = JSON::JWT.new payload\njwt.header[:typ] = \"dpop+jwt\"\njwt.header[:jwk] = jwk\nsigned_jwt = jwt.sign(private_key, :PS256)\nsigned_jwt.to_s\n<\/pre>\n\n\n\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306b\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308c\u3070\u51e6\u7406\u3068\u3057\u3066\u306f\u6210\u529f\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\"access_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMxNTM4NTEsImlhdCI6MTcwMzE1MzU1MSwiYXV0aF90aW1lIjoxNzAzMTUzMDgxLCJqdGkiOiI3ZjRjOTU1MS0wNjM4LTQ1OWItOWM0OS1hYTM3NTdmZDE3OTYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiIxZDMzZjc5Yy01NTU5LTQxZGYtOTZkZS03ZGJlYjIzM2YxM2YiLCJ0eXAiOiJEUG9QIiwiYXpwIjoidGVzdC1jbGllbnQiLCJub25jZSI6ImFiY2RlZmdoaWprIiwic2Vzc2lvbl9zdGF0ZSI6IjdlMDRiMzMzLWU3YTEtNDhlNi1hMzhiLWIyYmNmMWY3MDAwMCIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtc2FtcGxlLXJlYWxtIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sImNuZiI6eyJqa3QiOiJIUHlBVEZRYkFOZ0ZMRVNLb1hmWm1hYWVPYlg3UGRMeF82WE9Nb2kxUkZnIn0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiI3ZTA0YjMzMy1lN2ExLTQ4ZTYtYTM4Yi1iMmJjZjFmNzAwMDAiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6ImNsLXRhcm8ifQ.vpcMgEnKzh3zmmxDFEwVl_C3mXNPm42jCOu87XYMDRlA5BwHFTS5NUnkkyspkZV8CcYPLrVonXtYwZ_zm58wjObndw1Oka_xif6WZEmqB_Lzsrl3SsPbVtY4QfUR24IhGC42IuZ3MFZkFhdHAz1YpTU3XLRGy8xzrlWsjkM35Yk5PDoIOYFXdHd1ZGfxQsMlA4p4mTn40WuufBouDuI7Hp8laD1J4Fh4tcr_6RjDfzxxQj8Yz1gvFWuzNwdHtxPjX_U4Q3LR2RczHRuF9HL57QzLAhBqjYmqkt13cHEg0U3RgD0TZCHCNQ0GsRfELVn05Z1vQAkbwDVqFP5FADTxYA\",\"expires_in\":300,\"refresh_expires_in\":1750,\"refresh_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJkODAyNDZlZS1lMmM0LTQwNWEtODZjMC01OTc5NDJmY2M5ZmYifQ.eyJleHAiOjE3MDMxNTUzMDEsImlhdCI6MTcwMzE1MzU1MSwianRpIjoiNGYwNzhiNTUtNjY5ZC00NTIzLWJjMmItY2I0N2Q3ZWE0MzMwIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDg4L3JlYWxtcy9zYW1wbGUtcmVhbG0iLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsInN1YiI6IjFkMzNmNzljLTU1NTktNDFkZi05NmRlLTdkYmViMjMzZjEzZiIsInR5cCI6IlJlZnJlc2giLCJhenAiOiJ0ZXN0LWNsaWVudCIsIm5vbmNlIjoiYWJjZGVmZ2hpamsiLCJzZXNzaW9uX3N0YXRlIjoiN2UwNGIzMzMtZTdhMS00OGU2LWEzOGItYjJiY2YxZjcwMDAwIiwiY25mIjp7ImprdCI6IkhQeUFURlFiQU5nRkxFU0tvWGZabWFhZU9iWDdQZEx4XzZYT01vaTFSRmcifSwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBlbWFpbCIsInNpZCI6IjdlMDRiMzMzLWU3YTEtNDhlNi1hMzhiLWIyYmNmMWY3MDAwMCJ9.Xblbkc-rHhb85k5vqXLsO_zvLf6CYXerY15tdNpQkUs\",\"token_type\":\"DPoP\",\"id_token\":\"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMxNTM4NTEsImlhdCI6MTcwMzE1MzU1MSwiYXV0aF90aW1lIjoxNzAzMTUzMDgxLCJqdGkiOiI3OWE2OTUyZS1lMzM1LTQ3ZDEtYmU3YS05NzdjMmM1ZmUwNDkiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsImF1ZCI6InRlc3QtY2xpZW50Iiwic3ViIjoiMWQzM2Y3OWMtNTU1OS00MWRmLTk2ZGUtN2RiZWIyMzNmMTNmIiwidHlwIjoiSUQiLCJhenAiOiJ0ZXN0LWNsaWVudCIsIm5vbmNlIjoiYWJjZGVmZ2hpamsiLCJzZXNzaW9uX3N0YXRlIjoiN2UwNGIzMzMtZTdhMS00OGU2LWEzOGItYjJiY2YxZjcwMDAwIiwiYXRfaGFzaCI6IndxNHV4ZFV4bFMzOXh5d0NuaUI3aEEiLCJhY3IiOiIwIiwic2lkIjoiN2UwNGIzMzMtZTdhMS00OGU2LWEzOGItYjJiY2YxZjcwMDAwIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjbC10YXJvIn0.C--V8ip1OL2YRwTPLEfTZOsnm825Mqgjd4l1aY49ZEvFaNvhqA_QbNR8URn7KPvg2OxD53-ExpTJXzgL63S6Tr3O14La0n_Aglp6YSoXeNJKckboHEjWzIBHUt2gX7KSaJcIWwFdy6diit350nSqx8Sd56Laj_AjtUMdokMG1LJr9iyDEoJLYK3ahOtOUQc3AbpbjEjRg72vBXfxGjz842T21AcMMlC_HPdcI2412oGfDK8e-bBMG_I9-G5WBn4ahr8x3HEh0GK5-KFfLXUn1px-dL9McdGFxwnFvSHPGC3OHMMvRvoT2vGHWd5-4qGPFVNM0nxM19dUNFwKDyzm1w\",\"not-before-policy\":0,\"session_state\":\"7e04b333-e7a1-48e6-a38b-b2bcf1f70000\",\"scope\":\"openid profile email\"}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"39-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%B8%E3%81%AE%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88\">3.9 \u30ea\u30bd\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8<\/h3>\n\n\n\n<p>\u3067\u306f\u305b\u3063\u304b\u304f\u306a\u306e\u3067\u3001\u53d6\u5f97\u3057\u305f\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u7528\u3044\u3066\u30ea\u30bd\u30fc\u30b9\u30b5\u30fc\u30d0\u30fc\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u884c\u3046\u3053\u3068\u3092\u60f3\u50cf\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9449\">RFC9449: OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP)<\/a>\u3067\u3044\u3046C\u306e\u7b87\u6240\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">+--------+                                          +---------------+\n|        |--(A)-- Token Request ------------------->|               |\n| Client |        (DPoP Proof)                      | Authorization |\n|        |                                          |     Server    |\n|        |&lt;-(B)-- DPoP-Bound Access Token ----------|               |\n|        |        (token_type=DPoP)                 +---------------+\n|        |\n|        |\n|        |                                          +---------------+\n|        |--(C)-- DPoP-Bound Access Token --------->|               |\n|        |        (DPoP Proof)                      |    Resource   |\n|        |                                          |     Server    |\n|        |&lt;-(D)-- Protected Resource ---------------|               |\n|        |                                          +---------------+\n+--------+\n<\/pre>\n\n\n\n<p>\u3053\u306e\u3068\u304d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u3064\u3044\u3066\u3067\u3059\u304c\u3001\u4fdd\u8b77\u3055\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u306e\u63d0\u793a\u3068\u3068\u3082\u306bDPoP Proof \u3092\u6e21\u3059\u5834\u5408\u306f ath \u30af\u30ec\u30fc\u30e0\u3092\u542b\u3080\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30d5\u30a3\u30fc\u30eb\u30c9<\/th><th>\u5024<\/th><\/tr><\/thead><tbody><tr><td>ath<\/td><td>\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u306e\u5024\u306eASCII\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306eSHA-256\u30cf\u30c3\u30b7\u30e5\u3092base64url\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3057\u305f\u5024<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u307e\u3060irb\u3092\u958b\u304d\u7d9a\u3051\u3066\u3044\u308b\u5834\u5408\u306b\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b payload \u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> access_token = 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMxNTM4NTEsImlhdCI6MTcwMzE1MzU1MSwiYXV0aF90aW1lIjoxNzAzMTUzMDgxLCJqdGkiOiI3ZjRjOTU1MS0wNjM4LTQ1OWItOWM0OS1hYTM3NTdmZDE3OTYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiIxZDMzZjc5Yy01NTU5LTQxZGYtOTZkZS03ZGJlYjIzM2YxM2YiLCJ0eXAiOiJEUG9QIiwiYXpwIjoidGVzdC1jbGllbnQiLCJub25jZSI6ImFiY2RlZmdoaWprIiwic2Vzc2lvbl9zdGF0ZSI6IjdlMDRiMzMzLWU3YTEtNDhlNi1hMzhiLWIyYmNmMWY3MDAwMCIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtc2FtcGxlLXJlYWxtIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sImNuZiI6eyJqa3QiOiJIUHlBVEZRYkFOZ0ZMRVNLb1hmWm1hYWVPYlg3UGRMeF82WE9Nb2kxUkZnIn0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiI3ZTA0YjMzMy1lN2ExLTQ4ZTYtYTM4Yi1iMmJjZjFmNzAwMDAiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6ImNsLXRhcm8ifQ.vpcMgEnKzh3zmmxDFEwVl_C3mXNPm42jCOu87XYMDRlA5BwHFTS5NUnkkyspkZV8CcYPLrVonXtYwZ_zm58wjObndw1Oka_xif6WZEmqB_Lzsrl3SsPbVtY4QfUR24IhGC42IuZ3MFZkFhdHAz1YpTU3XLRGy8xzrlWsjkM35Yk5PDoIOYFXdHd1ZGfxQsMlA4p4mTn40WuufBouDuI7Hp8laD1J4Fh4tcr_6RjDfzxxQj8Yz1gvFWuzNwdHtxPjX_U4Q3LR2RczHRuF9HL57QzLAhBqjYmqkt13cHEg0U3RgD0TZCHCNQ0GsRfELVn05Z1vQAkbwDVqFP5FADTxYA'\n=> \"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMxNTM...\n\npayload = {\n  'jti': SecureRandom.uuid,\n  'htm': 'GET',\n  'htu': 'http:\/\/localhost:8088\/user\/1',\n  'iat': Time.now.to_i,\n  'ath': Base64.urlsafe_encode64(Digest::SHA256.digest(access_token)).delete('=')\n}\n=>\n{:jti=>\"56f995a3-19a7-4b65-9ccd-e640ad4ccfb2\",\n...\n<\/pre>\n\n\n\n<p>\u305d\u306e\u5f8c\u3001\u30c8\u30fc\u30af\u30f3\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u518d\u3068\u540c\u3058\u3088\u3046\u306bJWS\u3092\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">> jwt = JSON::JWT.new payload\n=>\n{\"jti\"=>\"asdfghjklzxcvbnm\",\n...\n\n> jwt.header[:typ] = \"dpop+jwt\"\n=> \"dpop+jwt\"\n\n> jwk = JSON::JWK.new(public_key, kid:'test')\n=>\n{\"kty\"=>:RSA,\n...\n\n> jwt.header[:jwk] = jwk\n=>\n{\"kty\"=>:RSA,\n...\n\n> signed_jwt = jwt.sign(private_key, :PS256)\n=>\n{\"jti\"=>\"56f995a3-19a7-4b65-9ccd-e640ad4ccfb2\",\n...\n\n> signed_jwt.to_s\n=> \"eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IlBTMjU2IiwiandrIjp7Imt0eSI6IlJTQSIsImUiOiJBUUFCIiwibiI6InJlbkxXb1Ffcy1XR3hBbXQwUG92Z1A1Qjh5eEhOdEc4OV94TnVnN0hiS1RJeFdMbk8wMHFQZmlrRTE1WTgwQzlnLThqQloxWkdtcE84ZXdsd3ZXQ2h5Sk5PSU5ma1NwekRKcHEzQUtlUjQxbFdscXlpNXp6dWprN3dvWjNnamd0dWRWLTFsZHRUVExWczRLMldWSzZBTGFnRTM1dGRwZXNKdERabmZ4dk9hdnA5ZU0zVHpGQm1DbkRXTTN2Tk81dDFiUWx2eW1LUDl4RHBMN0ZDQ01fOHhnR29mT3BQNDJtckNqbGpzUkFVTmFjTkxZNWIwdjJlVG9hSE90aS1obnlZNEJWVm1kMjcyRy1qQ0NobUFQX1dFeWRjWkE2RlQwNmxKenlucWlpcFlJYndlbjEtdjd2d1V2SkRqQmNoRHlocXJzOC1tdHpVY21VR2NjWnVOM2kydyIsImtpZCI6InRlc3QifX0.eyJqdGkiOiI1NmY5OTVhMy0xOWE3LTRiNjUtOWNjZC1lNjQwYWQ0Y2NmYjIiLCJodG0iOiJHRVQiLCJodHUiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvdXNlci8xIiwiaWF0IjoxNzAzMTUzOTgwLCJhdGgiOiJ3cTR1eGRVeGxTMzl4eXdDbmlCN2hLMUljOXlqMmJqU0JXTzlJUHd5RzVFIn0.OC2VbnjR397eRX0LTuHGGZUMnADwqXmcFN7r09D8i4US9JAf4KpViYqPpPxW_0AzFfQb81ycxZOVhxp5vwd5Ittrr9x2bof4fWIN3zDhzRwd_OavS7hhTDF7NWRXSMDxlO6ui6HTzfOtWR4-SrhtB6ZAWqAeXQQ7GoNk6NWFHyhQpE-jhJOKZ0uYqdYrdKQYzqhjziZXCXRFMj6Up4hHPHg5WU7p0HMPwva2FEvO97xfqfn4rM4bd6Fj8qh_K81_b9EvMNT6bQr93W7lGxObiVT5Xz9C3W53dh4ngiTNijYXxLBpSMaznGbhyZyz448vxyRJldE92I47xg803rRt8Q\"\n<\/pre>\n\n\n\n<p>\u307e\u305f\u3001 DPoP Proof \u3068\u3068\u3082\u306b\u3001 Authorization \u30d8\u30c3\u30c0\u30fc\u3092\u7528\u3044\u3066 \u30d0\u30a4\u30f3\u30c9\u3057\u305f\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3001\u30b5\u30f3\u30d7\u30eb\u3068\u3057\u3066\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">curl -i \\\n-H \"Authorization:DPoP eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqckFjalZVSU1Tb1RMVEpOZXdVZklSaUt0NzU5enZUYmp2RDdBejFvdUZjIn0.eyJleHAiOjE3MDMxNTM4NTEsImlhdCI6MTcwMzE1MzU1MSwiYXV0aF90aW1lIjoxNzAzMTUzMDgxLCJqdGkiOiI3ZjRjOTU1MS0wNjM4LTQ1OWItOWM0OS1hYTM3NTdmZDE3OTYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvcmVhbG1zL3NhbXBsZS1yZWFsbSIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiIxZDMzZjc5Yy01NTU5LTQxZGYtOTZkZS03ZGJlYjIzM2YxM2YiLCJ0eXAiOiJEUG9QIiwiYXpwIjoidGVzdC1jbGllbnQiLCJub25jZSI6ImFiY2RlZmdoaWprIiwic2Vzc2lvbl9zdGF0ZSI6IjdlMDRiMzMzLWU3YTEtNDhlNi1hMzhiLWIyYmNmMWY3MDAwMCIsImFjciI6IjAiLCJhbGxvd2VkLW9yaWdpbnMiOlsiaHR0cHM6Ly9jbGllbnQuZXhhbXBsZS5jb20iXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtc2FtcGxlLXJlYWxtIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sImNuZiI6eyJqa3QiOiJIUHlBVEZRYkFOZ0ZMRVNLb1hmWm1hYWVPYlg3UGRMeF82WE9Nb2kxUkZnIn0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiI3ZTA0YjMzMy1lN2ExLTQ4ZTYtYTM4Yi1iMmJjZjFmNzAwMDAiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6ImNsLXRhcm8ifQ.vpcMgEnKzh3zmmxDFEwVl_C3mXNPm42jCOu87XYMDRlA5BwHFTS5NUnkkyspkZV8CcYPLrVonXtYwZ_zm58wjObndw1Oka_xif6WZEmqB_Lzsrl3SsPbVtY4QfUR24IhGC42IuZ3MFZkFhdHAz1YpTU3XLRGy8xzrlWsjkM35Yk5PDoIOYFXdHd1ZGfxQsMlA4p4mTn40WuufBouDuI7Hp8laD1J4Fh4tcr_6RjDfzxxQj8Yz1gvFWuzNwdHtxPjX_U4Q3LR2RczHRuF9HL57QzLAhBqjYmqkt13cHEg0U3RgD0TZCHCNQ0GsRfELVn05Z1vQAkbwDVqFP5FADTxYA\" \\\n-H \"DPoP:eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IlBTMjU2IiwiandrIjp7Imt0eSI6IlJTQSIsImUiOiJBUUFCIiwibiI6InJlbkxXb1Ffcy1XR3hBbXQwUG92Z1A1Qjh5eEhOdEc4OV94TnVnN0hiS1RJeFdMbk8wMHFQZmlrRTE1WTgwQzlnLThqQloxWkdtcE84ZXdsd3ZXQ2h5Sk5PSU5ma1NwekRKcHEzQUtlUjQxbFdscXlpNXp6dWprN3dvWjNnamd0dWRWLTFsZHRUVExWczRLMldWSzZBTGFnRTM1dGRwZXNKdERabmZ4dk9hdnA5ZU0zVHpGQm1DbkRXTTN2Tk81dDFiUWx2eW1LUDl4RHBMN0ZDQ01fOHhnR29mT3BQNDJtckNqbGpzUkFVTmFjTkxZNWIwdjJlVG9hSE90aS1obnlZNEJWVm1kMjcyRy1qQ0NobUFQX1dFeWRjWkE2RlQwNmxKenlucWlpcFlJYndlbjEtdjd2d1V2SkRqQmNoRHlocXJzOC1tdHpVY21VR2NjWnVOM2kydyIsImtpZCI6InRlc3QifX0.eyJqdGkiOiI1NmY5OTVhMy0xOWE3LTRiNjUtOWNjZC1lNjQwYWQ0Y2NmYjIiLCJodG0iOiJHRVQiLCJodHUiOiJodHRwOi8vbG9jYWxob3N0OjgwODgvdXNlci8xIiwiaWF0IjoxNzAzMTUzOTgwLCJhdGgiOiJ3cTR1eGRVeGxTMzl4eXdDbmlCN2hLMUljOXlqMmJqU0JXTzlJUHd5RzVFIn0.OC2VbnjR397eRX0LTuHGGZUMnADwqXmcFN7r09D8i4US9JAf4KpViYqPpPxW_0AzFfQb81ycxZOVhxp5vwd5Ittrr9x2bof4fWIN3zDhzRwd_OavS7hhTDF7NWRXSMDxlO6ui6HTzfOtWR4-SrhtB6ZAWqAeXQQ7GoNk6NWFHyhQpE-jhJOKZ0uYqdYrdKQYzqhjziZXCXRFMj6Up4hHPHg5WU7p0HMPwva2FEvO97xfqfn4rM4bd6Fj8qh_K81_b9EvMNT6bQr93W7lGxObiVT5Xz9C3W53dh4ngiTNijYXxLBpSMaznGbhyZyz448vxyRJldE92I47xg803rRt8Q\" \\\n'http:\/\/localhost:8088\/user\/1'\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"4-%E3%81%82%E3%81%A8%E3%81%8C%E3%81%8D\">4. \u3042\u3068\u304c\u304d<\/h2>\n\n\n\n<p>\u4eca\u56de\u306f Keycloak\u3067\u306eDPoP\u5b9f\u88c5\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u904e\u53bb\u306eFAPI1 Advanced\u306e\u8a18\u4e8b\u3067\u691c\u8a3c\u3057\u305fMTLS\u3067\u306f\u5bfe\u5fdc\u304c\u96e3\u3057\u3044\u30b1\u30fc\u30b9\u306a\u3069\u3001DPoP\u306b\u3088\u3063\u3066\u3042\u308b\u7a0b\u5ea6\u306e\u30b1\u30fc\u30b9\u3092\u88dc\u5b8c\u3067\u304d\u308b\u306e\u3067\u306f\u306a\u3044\u304b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001Keycloak\u306eFAPI 2\u30c9\u30e9\u30d5\u30c8\u4ed5\u69d8\u3078\u306e\u5bfe\u5fdc\u3082\u78ba\u8a8d\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u3044\u305a\u308c\u3069\u3053\u304b\u3067\u3054\u7d39\u4ecb\u3067\u304d\u308c\u3070\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API Security Profile 1.0 &#8211; Part 1: Ad [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":68705,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[520],"tags":[974,521],"class_list":["post-67407","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-keycloak","tag-dpop","tag-keycloak"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059 - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3<\/title>\n<meta name=\"description\" content=\"keycloak |1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059 - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"og:description\" content=\"keycloak |1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407\" \/>\n<meta property=\"og:site_name\" content=\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/creationline\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-26T23:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1144\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@creationline\" \/>\n<meta name=\"twitter:site\" content=\"@creationline\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"19\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/7d923d1c017568a1a5e66d7bb1c8764a\"},\"headline\":\"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059\",\"datePublished\":\"2023-12-26T23:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407\"},\"wordCount\":619,\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/advanced-setting.png\",\"keywords\":[\"DPoP\",\"Keycloak\"],\"articleSection\":[\"keycloak\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407\",\"name\":\"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059 - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/advanced-setting.png\",\"datePublished\":\"2023-12-26T23:00:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/7d923d1c017568a1a5e66d7bb1c8764a\"},\"description\":\"keycloak |1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#primaryimage\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/advanced-setting.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/advanced-setting.png\",\"width\":1144,\"height\":678},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\\\/67407#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"HOME\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"keycloak\",\"item\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cloudnative\\\/keycloak\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#website\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/\",\"name\":\"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3\",\"description\":\"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/#\\\/schema\\\/person\\\/7d923d1c017568a1a5e66d7bb1c8764a\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/avatar.png\",\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/avatar.png\",\"contentUrl\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/cms_x3GWkuX\\\/wp-content\\\/uploads\\\/2021\\\/12\\\/avatar.png\",\"caption\":\"admin\"},\"url\":\"https:\\\/\\\/www.creationline.com\\\/tech-blog\\\/author\\\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059 - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"keycloak |1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407","og_locale":"ja_JP","og_type":"article","og_title":"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059 - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","og_description":"keycloak |1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API","og_url":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407","og_site_name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","article_publisher":"https:\/\/www.facebook.com\/creationline","article_published_time":"2023-12-26T23:00:00+00:00","og_image":[{"width":1144,"height":678,"url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png","type":"image\/png"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@creationline","twitter_site":"@creationline","twitter_misc":{"\u57f7\u7b46\u8005":"admin","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"19\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#article","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407"},"author":{"name":"admin","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/7d923d1c017568a1a5e66d7bb1c8764a"},"headline":"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059","datePublished":"2023-12-26T23:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407"},"wordCount":619,"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png","keywords":["DPoP","Keycloak"],"articleSection":["keycloak"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407","url":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407","name":"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059 - Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","isPartOf":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#primaryimage"},"image":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#primaryimage"},"thumbnailUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png","datePublished":"2023-12-26T23:00:00+00:00","author":{"@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/7d923d1c017568a1a5e66d7bb1c8764a"},"description":"keycloak |1. \u6982\u8981 shiba \u30c1\u30fc\u30e0\u306e\u4e2d\u6751\u3067\u3059\u3002\u5c11\u3057\u524d\u306e\u8a18\u4e8b\u3067 Keycloak \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u8a2d\u5b9a\u3057\u305f\u5f8c\u3067 Financial-grade API","breadcrumb":{"@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#primaryimage","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2023\/12\/advanced-setting.png","width":1144,"height":678},{"@type":"BreadcrumbList","@id":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak\/67407#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"HOME","item":"https:\/\/www.creationline.com\/tech-blog"},{"@type":"ListItem","position":2,"name":"\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6","item":"https:\/\/www.creationline.com\/tech-blog\/cloudnative"},{"@type":"ListItem","position":3,"name":"keycloak","item":"https:\/\/www.creationline.com\/tech-blog\/cloudnative\/keycloak"},{"@type":"ListItem","position":4,"name":"Keycloak 23.0.3 \u3067 DPoP \u3092\u8a66\u3059"}]},{"@type":"WebSite","@id":"https:\/\/www.creationline.com\/tech-blog\/#website","url":"https:\/\/www.creationline.com\/tech-blog\/","name":"Tech Blog\uff5c\u30af\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30f3","description":"\u30a2\u30b8\u30e3\u30a4\u30eb\uff06DevOps\u3001\u30af\u30e9\u30a6\u30c9\u30cd\u30a4\u30c6\u30a3\u30d6\u3001AI\uff06LLM\u306e\u5148\u7aef\u6280\u8853","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.creationline.com\/tech-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/www.creationline.com\/tech-blog\/#\/schema\/person\/7d923d1c017568a1a5e66d7bb1c8764a","name":"admin","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png","url":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png","contentUrl":"https:\/\/www.creationline.com\/tech-blog\/cms_x3GWkuX\/wp-content\/uploads\/2021\/12\/avatar.png","caption":"admin"},"url":"https:\/\/www.creationline.com\/tech-blog\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/67407","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/comments?post=67407"}],"version-history":[{"count":11,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/67407\/revisions"}],"predecessor-version":[{"id":68847,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/posts\/67407\/revisions\/68847"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media\/68705"}],"wp:attachment":[{"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/media?parent=67407"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/categories?post=67407"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.creationline.com\/tech-blog\/wp-json\/wp\/v2\/tags?post=67407"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}