Lamento haberme sentido mal y haber tenido algo de tiempo libre. En el artículo anterior, aprendimos cómo obtener una dirección digital de Japan Post (digi-ad) y usarla en la aplicación de creación de etiquetas de envío proporcionada por Japan Post. Esta vez intentaremos conseguirlo vía API. Después de todo,Página "API de código postal/dirección digital"Dado que es compatible con OAuth 2.0 y OpenID Connect, no queda otra opción que hacerlo.

Obtenga Yu-ID Biz

Ahora, para poder acceder a la API de Yu-ID, debes registrarte con Código Postal/Dirección Digital para Negocios. Cuando vayas a la página de registro, verás esta pantalla:

El nombre de usuario se puede cambiar más tarde. Una vez que ingrese un nombre apropiado, el botón "Registrar" se volverá negro y podrá presionarse, así que presiónelo.

Esto te llevará a la pantalla de registro de la organización. Parece que pueden aplicarlo tanto corporaciones como empresarios unipersonales. Cualquiera de las dos opciones estaba bien para mí, pero decidí optar por la opción corporativa, que tiene más campos de entrada. También soy dueño de una empresa llamada NAT Consulting LLC.

Una vez que haya completado el registro, será llevado a una pantalla que muestra una lista de usuarios.

Esta pantalla no solo muestra la lista de usuarios, sino también un menú de "Configuración" que muestra las configuraciones que ha realizado su organización y, debajo de "Servicios", hay un enlace en el menú de la izquierda a una página sobre la "API de código postal y dirección digital" y una página para "Buscar una dirección a partir de una dirección digital". Vayamos a la página que estamos buscando, "API de código postal/dirección digital".

Haga clic para abrir el menú.

La "Lista del sistema" le permite ver una lista de clientes registrados y registrar clientes.

En "Probar credenciales de IA", puede mostrar client_id y client_secret para usar la API de prueba. También hay documentación de referencia de API para pruebas. Lo primero que debes hacer es crear un cliente que llamará a la API de prueba y deberás seguir las instrucciones aquí. La referencia de la API se ve así:

El botón “Descargar” parece que descargará la especificación OpenAPI, pero no pude descargarlo. Ojalá arreglaran esta área.

La referencia de API contiene la referencia de API de producción.

Las pautas de uso incluyen notas sobre cómo manejar los datos de "dirección digital".

Las notas de la versión están actualmente en blanco.

La fuente de datos contiene el archivo CSV que es la fuente de los datos proporcionados por esta API.

Probemos ahora la API de prueba.

Ahora, intentemos acceder a la API de prueba y veamos cómo se utilizan OAuth y OpenID Connect.

Obtener un token de acceso

Según la documentación, parece ser compatible.OAuth 2.0 [RFC6749] のconcesión de credenciales de cliente Parece ser único. El token de acceso se obtiene de esta manera. Normalmente, el token de acceso se enviaría en el encabezado de autorización (que el servidor debe soportar) o como un parámetro en el cuerpo de la solicitud, pero en este ejemplo, se envía en el cuerpo como JSON.

Es así.

{
"grant_type": "client_credentials",
"client_id": "Test_Client_Identifier_String",
"secret_key": "Test_Secret_Key"
}

Esto no está definido en OAuth 2.0.Especificaciones únicasSería justo decir eso. Por cierto, si lo envía utilizando el método especificado en RFC6749, el resultado será una solicitud incorrecta.

Pero esa no es la única característica única. En este caso, la solicitud debe incluir x-forwarded-for. Esta también es una extensión propietaria. Puedo entender cómo te sientes, pero... Por cierto, no hay ninguna especificación sobre qué poner dentro. Creo que probablemente ingrese la dirección IP del dispositivo que se conecta a este cliente. Sin embargo, según RFC7239, se dice que se debe dejar de usar x-forwarded-for y utilizar Forwarded.

Por cierto, el punto final de la API se puede visualizar haciendo clic en la ruta de la documentación.

Con esto en mente, enviamos una solicitud a la API de prueba, que se puede obtener de la documentación de la API.

curl -X POST https://stub-qz73x.da.pf.japanpost.jp/api/v1/j/token \
  -H "Content-Type: application/json" \
  -H "X-Forwarded-For: 64.227.48.220" \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "Test_Client_Identifier_String",
    "secret_key": "Test_Secret_Key"
  }'

Si haces eso, recibirás una respuesta como esta:

{"token":"eyJhbGciOiJSU.中略.TmrM38fAf8cgNm1QAnf-j0YFQA",
"token_type":"jwt",
"expires_in":600,
"scope":"J1"}

El token de acceso está en formato JWT. El interior se ve así.

Encabezamiento

{
  "alg": "RS256",
  "typ": "JWT"
}

carga útil

{
  "iss": "JPD",
  "sub": "DGA TOKEN",
  "scope": "J1",
  "clientId": "Biz_DaPfJapanpost_MockAPI_j3QKS",
  "ec_id": "8aeaf147-112f-4127-8cbb-2eff08a8e161",
  "iat": 1742886316,
  "exp": 1742886916
}

Parece así. Oh, el tipo es extraño.RFC9068Según esto, el tipo debería ser at+jwt.

Además, dado que iss es solo una cadena, no es posible descubrir el JWK y, por lo tanto, no se puede verificar, pero esto no es un problema ya que es el propio Japan Post el que realiza la verificación. Pensé que sub contendría el client_id, pero parece que este no es el caso y es una cadena fija.

Ahora, intentemos resolver la dirección digital en una dirección.

Usando este token de acceso, luego realizamos una solicitud OAuth al punto final de búsqueda. El token de acceso se puede enviar en el encabezado de autorización. Parece que X-Forwarded-For todavía se está enviando. La API de prueba le permite buscar tres direcciones digitales de prueba (A3E7FK2, JN2LKS4, QN2GQX6) y códigos postales y códigos postales comerciales individuales para el barrio de Chiyoda, Tokio.

Con rizo se ve así.

curl -X GET https://stub-qz73x.da.pf.japanpost.jp/api/v1/searchcode/A7E2FK2 \
  -H "Authorization: Bearer eyJhbGci..中略..QAnf-j0YFQA" \
  -H "X-Forwarded-For: 64.227.48.220" \
  -H "Accept: application/json"

Luego volverá con algo como esto:

{
	"page": 1,
	"limit": 1000,
	"count": 1,
	"searchtype": "dgacode",
	"addresses": [
		{
			"dgacode": "A7E2FK2",
			"zip_code": "100-0005",
			"pref_code": "13",
			"pref_name": "東京都",
			"pref_kana": null,
			"pref_roma": null,
			"city_code": "13101",
			"city_name": "千代田区",
			"city_kana": null,
			"city_roma": null,
			"town_name": "丸の内",
			"town_kana": null,
			"town_roma": null,
			"biz_name": null,
			"biz_kana": null,
			"biz_roma": null,
			"block_name": "2丁目7−2",
			"other_name": "部屋番号:サンプル1",
			"address": "東京都千代田区丸の内2丁目7−2部屋番号:サンプル1",
			"longitude": null,
			"latitude": null
		}
	]
}

Bueno, la respuesta no es la respuesta UserInfo de OpenID Connect, pero es única.

Por cierto, si especifica una dirección digital distinta de las tres anteriores,

{
"request_id":"848f5369-56fb-4488-aecd-b82599a1b2f9",
"error_code":"404-1029-0001",
"message":"該当するデジアドがありませんでした"
}

y vuelve.

Acceder al entorno de producción

Bueno, eso funcionó, ahora intentemos acceder al entorno de producción.

Lo que debes hacer es lo mismo que para la prueba, solo que cambiarán el destino, el client_id y el client_secret. Puede obtener el client_id y el client_secret de producción registrando un cliente en el menú "Lista del sistema".

Para obtener el token, vaya a https://api.da.pf.japanpost.jp/api/v1/j/token Por favor cámbielo a y solicitelo.

curl -X POST https://api.da.pf.japanpost.jp/api/v1/j/token \
  -H "Content-Type: application/json" \
  -H "X-Forwarded-For: 64.227.48.220" \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "クライアントID",
    "secret_key": "クライアントシークレット"
  }'

Se devolverá un token de acceso, que podrás utilizar para realizar solicitudes. Esto devolverá el JSON que se muestra arriba. También puede especificar un código postal en lugar de una dirección digital.

  curl -X GET https://api.da.pf.japanpost.jp/api/v1/searchcode/6180000 \
  -H "Authorization: Bearer eyJhbGciOiJS..中略..wV0si0TiQ" \
  -H "X-Forwarded-For: 64.227.48.220" \
  -H "Accept: application/json"

するとこんなふうに帰ってきます。
{
  "page": 1,
  "limit": 1000,
  "count": 2,
  "searchtype": "zipcode",
  "addresses": [
    {
      "dgacode": null,
      "zip_code": "6180000",
      "pref_code": "26",
      "pref_name": "京都府",
      "pref_kana": "キョウトフ",
      "pref_roma": "KYOTO",
      "city_code": "26303",
      "city_name": "乙訓郡大山崎町",
      "city_kana": "オトクニグンオオヤマザキチョウ",
      "city_roma": "OTOKUNI-GUN OYAMAZAKI-CHO",
      "town_name": "",
      "town_kana": "",
      "town_roma": "",
      "biz_name": null,
      "biz_kana": null,
      "biz_roma": null,
      "block_name": null,
      "other_name": null,
      "address": null,
      "longitude": null,
      "latitude": null
    },
    {
      "dgacode": null,
      "zip_code": "6180000",
      "pref_code": "27",
      "pref_name": "大阪府",
      "pref_kana": "オオサカフ",
      "pref_roma": "OSAKA",
      "city_code": "27301",
      "city_name": "三島郡島本町",
      "city_kana": "ミシマグンシマモトチョウ",
      "city_roma": "MISHIMA-GUN SHIMAMOTO-CHO",
      "town_name": "",
      "town_kana": "",
      "town_roma": "",
      "biz_name": null,
      "biz_kana": null,
      "biz_roma": null,
      "block_name": null,
      "other_name": null,
      "address": null,
      "longitude": null,
      "latitude": null
    }
  ]
}

Resumen

Así que, para resumir.

  1. API de conversión de anuncios digitalesRFC6749Obtenga un token de acceso utilizando una especificación única similar a la concesión de credenciales del cliente. Este token de acceso es un JWT, pero el tipo es RFC9068Como se especifica, no es at+jwt sino JWT.
  2. Ahora, utiliza el token de acceso obtenidoRFC6750El código se envía en este formato para obtener la cadena de caracteres (no necesariamente una dirección) registrada en la dirección digital.
    • Se puede registrar cualquier cadena; por ejemplo, se podría registrar una dirección como "En una carta recibida desde Tokio: 'No existes'. No aparece en el espejo y la gente no lo nota. Desaparecí silenciosamente". También se pueden registrar cosas como "1.
  3. Todavía no puedo encontrar nada que se parezca a OpenID Connect.
  4. También puede obtener una dirección especificando un código postal en lugar de una dirección digital. Si hay duplicados, se devolverán varios elementos en una matriz.

Por cierto, hay muchos códigos postales duplicados. Según la información, hay 1,341 duplicados. Dependiendo del artículo, incluso puede ser de una prefectura diferente. ¿Cómo pasó esto...?

nota

  1. Bueno, lo mismo ocurre con la reclamación de dirección en OpenID Connect.