gpt4 book ai didi

python - Fhir 史诗沙盒 : Using a JWT to Obtain an Access Token for a Backend Service

转载 作者:行者123 更新时间:2023-12-04 14:07:14 51 4
gpt4 key购买 nike

我正在尝试使用来自 https://fhir.epic.com/ 的沙箱用于后端服务。
我正在关注本教程:https://fhir.epic.com/Documentation?docId=oauth2&section=BackendOAuth2Guide :

  • 我已经注册了一个新的应用程序,
  • 创建了一个 JWT(使用 SSL key )
  • https://jwt.io/ 上测试了 JWT : 工作正常!

  • 但我无法将 JWT 发布到端点以获取访问 token 。我应该向这个 URL 发送一个 POST 请求: https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token .
    我正在使用 python,这是我到目前为止的代码:
    import json
    import requests
    from datetime import datetime, timedelta, timezone
    from requests.structures import CaseInsensitiveDict
    from jwt import (
    JWT,
    jwk_from_dict,
    jwk_from_pem,
    )
    from jwt.utils import get_int_from_datetime


    def main():
    instance = JWT()
    message = {
    # Client ID for non-production
    'iss': '990573e-13e3-143b-8b03-4fbb577b660',
    'sub': '990573e-13e3-143b-8b03-4fbb577b660',
    'aud': 'https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token',
    'jti': 'f9eaafba-2e49-11ea-8880-5ce0c5aee679',
    'iat': get_int_from_datetime(datetime.now(timezone.utc)),
    'exp': get_int_from_datetime(datetime.now(timezone.utc) + timedelta(hours=1)),
    }

    # Load a RSA key from a PEM file.
    with open('/home/user/ssl/privatekey.pem', 'rb') as fh:
    signing_key = jwk_from_pem(fh.read())

    compact_jws = instance.encode(message, signing_key, alg='RS384')
    print(compact_jws)

    headers = CaseInsensitiveDict()
    headers['Content-Type'] = 'application/x-www-form-urlencoded'

    data = {
    'grant_type': 'client_credentials',
    'client_assertion_type': 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
    'client_assertion': compact_jws
    }

    x = requests.post('https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token', headers=headers, data=data)
    print(x.text)
    但我总是收到 400 错误:
    {
    "error": "invalid_client",
    "error_description": null
    }
    网址是否正确?我怎样才能获得访问 token 来玩沙盒?

    最佳答案

    'exp': get_int_from_datetime(datetime.now(timezone.utc) + timedelta(hours=1)),
    乍一看,这似乎是您的问题。 Epic 要求 exp future 不超过 5 分钟。
    几条建议,除此之外:
  • 使用可从 jwt.io 获得的库
  • Jwt.io 还有一个调试器,您可以在其中粘贴 JWT 以验证它是否有效
  • 关于python - Fhir 史诗沙盒 : Using a JWT to Obtain an Access Token for a Backend Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67558827/

    51 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com