{"id":18,"date":"2025-04-15T00:14:08","date_gmt":"2025-04-14T15:14:08","guid":{"rendered":"https:\/\/demosite.uniikey-cloud.com\/?page_id=18"},"modified":"2025-04-15T13:11:22","modified_gmt":"2025-04-15T04:11:22","slug":"%e3%81%84%e3%82%8d%e3%81%afid_004_%e5%b8%82%e5%b7%9d%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3","status":"publish","type":"page","link":"https:\/\/demosite.uniikey-cloud.com\/?page_id=18","title":{"rendered":"\u3044\u308d\u306fID_004_\u5e02\u5ddd\u30ed\u30b0\u30a4\u30f3"},"content":{"rendered":"\n<button id=\"oidc-login-button\">\u30ed\u30b0\u30a4\u30f3<\/button>\n<button id=\"oidc-signup-button\">\u65b0\u898f\u4f1a\u54e1\u767b\u9332<\/button>\n\n\n\n<div class=\"wp-block-group alignfull is-style-section-5 is-layout-flow wp-block-group-is-layout-flow is-style-section-5--1\" style=\"min-height:100vh;margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50)\">\n<div class=\"wp-block-columns alignfull is-layout-flex wp-container-core-columns-is-layout-47c06fe3 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-cover is-light\" style=\"min-height:100vh;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-0 has-background-dim\" style=\"background-color:#818181\"><\/span><img decoding=\"async\" class=\"wp-block-cover__image-background\" alt=\"Black and white photo focusing on a woman and a child from afar.\" src=\"https:\/\/demosite.uniikey-cloud.com\/wp-content\/themes\/twentytwentyfive\/assets\/images\/link-in-bio-image.webp\" data-object-fit=\"cover\"\/><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<div style=\"height:var(--wp--preset--spacing--20)\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n<\/div><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-group is-vertical is-content-justification-stretch is-nowrap is-layout-flex wp-container-core-group-is-layout-9a2e2d63 wp-block-group-is-layout-flex\" style=\"min-height:100%\">\n<p class=\"has-text-align-left has-x-large-font-size\" style=\"line-height:1.2\">I\u2019m Asahachi K\u014dno, a Japanese photographer, a member of Los Angeles\u2019s Japanese Camera Pictorialists of California. Before returning to Japan, I worked as a photo retoucher.<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-f1189ed3 wp-block-group-is-layout-flex\">\n<p><a href=\"#\">Instagram<\/a><\/p>\n\n\n\n<p><a href=\"#\">X<\/a><\/p>\n\n\n\n<p><a href=\"#\">TikTok<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<script>\n\/\/ OIDC\u8a2d\u5b9a\nconst config = {\n  baseEndpoint: 'https:\/\/dev-auth-hub06.uniikey-auth-hub.com',\n  endpoints: {\n    login: '\/login',\n    signup: '\/signup'\n  },\n  clientId: 'child_flftg',\n  redirectUri: 'https:\/\/kbsdemo-id-callback-function-450014854912.asia-northeast1.run.app',\n  scope: 'openid',\n  responseType: 'code',\n};\n\n\/\/ \u30e9\u30f3\u30c0\u30e0\u306a\u6587\u5b57\u5217\u3092\u751f\u6210\u3059\u308b\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\nfunction generateRandomString(length) {\n  const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n  let text = '';\n  for (let i = 0; i < length; i++) {\n    text += possible.charAt(Math.floor(Math.random() * possible.length));\n  }\n  return text;\n}\n\n\/\/ state \u3068 nonce \u3092\u751f\u6210\u3057\u3066\u4fdd\u5b58\nfunction generateAndStoreAuthValues() {\n  const state = generateRandomString(32);\n  const nonce = generateRandomString(32);\n  \n  \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u4fdd\u5b58\uff08\u672c\u756a\u74b0\u5883\u3067\u306f\u3088\u308a\u5b89\u5168\u306a\u4fdd\u5b58\u65b9\u6cd5\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\uff09\n  sessionStorage.setItem('oidc_state', state);\n  sessionStorage.setItem('oidc_nonce', nonce);\n  \n  return { state, nonce };\n}\n\n\/\/ \u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u624b\u52d5\u3067\u69cb\u7bc9\u3059\u308b\u95a2\u6570\nfunction buildQueryString(params) {\n  return Object.entries(params)\n    .map(([key, value]) => {\n      return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n    })\n    .join('&');\n}\n\n\/\/ \u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8URL\u3092\u4f5c\u6210\nfunction createAuthorizationRequest(authType = 'login') {\n  const { state, nonce } = generateAndStoreAuthValues();\n  \n  \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u6e96\u5099\n  const queryParams = {\n    client_id: config.clientId,\n    redirect_uri: config.redirectUri,\n    response_type: config.responseType,\n    scope: config.scope,\n    state: state,\n    nonce: nonce\n  };\n\n  \/\/ authType\u306b\u57fa\u3065\u3044\u3066\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u9078\u629e\n  const endpoint = authType === 'signup' ? config.endpoints.signup : config.endpoints.login;\n  \n  \/\/ \u30af\u30a8\u30ea\u6587\u5b57\u5217\u3092\u624b\u52d5\u3067\u69cb\u7bc9\n  const queryString = buildQueryString(queryParams);\n  \n  \/\/ \u6700\u7d42\u7684\u306aURL\u3092\u69cb\u7bc9\n  return `${config.baseEndpoint}${endpoint}?${queryString}`;\n}\n\n\/\/ \u8a8d\u53ef\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u5b9f\u884c\nfunction initiateOIDCAuth(authType) {\n  const authUrl = createAuthorizationRequest(authType);\n  window.location.href = authUrl;\n}\n\n\/\/ \u30dc\u30bf\u30f3\u306b\u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc\u3092\u8ffd\u52a0\ndocument.addEventListener('DOMContentLoaded', () => {\n  \/\/ \u30ed\u30b0\u30a4\u30f3\u30dc\u30bf\u30f3\n  const loginButton = document.getElementById('oidc-login-button');\n  if (loginButton) {\n    loginButton.addEventListener('click', () => initiateOIDCAuth('login'));\n  }\n\n  \/\/ \u65b0\u898f\u767b\u9332\u30dc\u30bf\u30f3\n  const signupButton = document.getElementById('oidc-signup-button');\n  if (signupButton) {\n    signupButton.addEventListener('click', () => initiateOIDCAuth('signup'));\n  }\n});\n<\/script>\n\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30ed\u30b0\u30a4\u30f3 \u65b0\u898f\u4f1a\u54e1\u767b\u9332 I\u2019m Asahachi K\u014dno, a Japanese photographer, a member of Los Angeles\u2019s Japanese Camera Pictorialist [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-18","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=\/wp\/v2\/pages\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=18"}],"version-history":[{"count":4,"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=\/wp\/v2\/pages\/18\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=\/wp\/v2\/pages\/18\/revisions\/27"}],"wp:attachment":[{"href":"https:\/\/demosite.uniikey-cloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}