Код: Выделить всё
client_assertion). Я продолжаю получать:
{
"error": "invalid_client",
"error_description": null
}
Что я делал шаг за шагом
1. Сгенерированная пара ключей RSA:Код: Выделить всё
openssl genrsa -out privatekey.pem 2048
openssl req -new -x509 -key privatekey.pem -out publickey509.pem -subj '/CN=MyApp'
openssl x509 -pubkey -noout -in publickey509.pem > pubkey.pem
Код: Выделить всё
import json
from jwcrypto import jwk
with open("pubkey.pem", "rb") as f:
key = jwk.JWK.from_pem(f.read())
key_dict = json.loads(key.export_public())
key_dict["kid"] = "my-key-id-001"
jwks = {"keys": [key_dict]}
print(json.dumps(jwks, indent=2))
4. Сгенерированный JWT:
Код: Выделить всё
import jwt, time, uuid
private_key = open("privatekey.pem").read()
payload = {
"iss": "",
"sub": "",
"aud": "https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token",
"jti": str(uuid.uuid4()),
"exp": int(time.time()) + 300
}
token = jwt.encode(payload, private_key, algorithm="RS384", headers={"kid": "my-key-id-001"})
Код: Выделить всё
grant_type=client_credentials
client_id=
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
client_assertion=
Что, как я подозреваю, может быть не так
- в заголовке JWT может не соответствовать JWKS, размещенному в Gist.
Код: Выделить всё
kid - GitHub Gist может отображать неправильный тип контента: application/json
- В JWKS отсутствуют обязательные поля (, е, n)
Код: Выделить всё
kty - утверждение неверно
Код: Выделить всё
aud - Приложение не полностью активировано на портале Epic
Вопросы
- Каков правильный сквозной поток для Epic FHIR client_credentials + JWT?
- Является ли GitHub Gist допустимым хостом для URL-адреса набора JWK?
- Должен ли ребенок в заголовке JWT точно совпадать с кодом в JWKS?
- Каковы распространенные причины появления инвалидного_клиента с нулевым описанием в Epic?