为了账号安全,请及时绑定邮箱和手机立即绑定

EPIC FHIR 智能后端服务: { “错误”: “invalid_client” }

EPIC FHIR 智能后端服务: { “错误”: “invalid_client” }

Go
白衣染霜花 2022-09-26 20:29:43
我正在尝试在移动编程语言上实现EPIC FHIR智能后端服务(后端OAuth 2.0)。我已经创建了我的开发人员帐户,在那里上传了公钥,并选择 作为应用程序受众。backend system我很确定我的jwt令牌是正确的。我已经检查过它 jwt.io,签名是正确的。但是,我总是收到此错误:{ “错误”: “invalid_client”,“error_description”: 空 }我也尝试了其他可能的解决方案,例如:确保喷气式飞机索赔内的到期日低于5分钟将有效负载放置在具有正确内容类型的正文中,即application/x-www-form-urlencoded确保使用沙盒client_id使用正确的 jwt 登录方法 (RS384)我应该怎么做才能解决此问题?顺便说一句,我还在Google组上看到了几个讨论,说在创建开发帐户后等待一两天是值得的。以下是我的代码。感谢您的帮助!var (    oauth2TokenUrl  = "https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token"    sandboxClientID = "..."    privateKey      = "...")// load private keysignKey, err := jwt.ParseRSAPrivateKeyFromPEM([]byte(privateKey))So(err, ShouldBeNil)// construct jwt claimsnow := time.Now()claims := jwt.MapClaims{    "iss": sandboxClientID,    "sub": sandboxClientID,    "aud": oauth2TokenUrl,    "jti": uuid.New().String(),             // fill with reference id    "exp": now.Add(1 * time.Minute).Unix(), // cannot be more than 5 minutes!}log.Info("  => claims:", utility.ToJsonString(claims))// generate signed token using private key with RS384 algorithmalg := jwt.SigningMethodRS384signedToken, err := jwt.NewWithClaims(alg, claims).SignedString(signKey)So(err, ShouldBeNil)log.Info("  => signed token", signedToken)// prepare api call payloadpayload := map[string]string{    "grant_type":            "client_credentials",    "client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",    "client_assertion":      signedToken,}// dispatch the api callreq := resty.New().    R().    EnableTrace().    SetFormData(payload)res, err := req.Post(oauth2TokenUrl)So(err, ShouldBeNil)log.Info("  => response status:", res.StatusCode())log.Info("  => response header:", res.Header())log.Info("  => response body:", string(res.Body()))// parse responseresBody := make(map[string]interface{})err = json.Unmarshal(res.Body(), &resBody)So(err, ShouldBeNil)
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

太棒了,我现在让它工作了。

解决方案只是在等待!这令人困惑,因为我在文档上找不到有关此内容的任何解释,并且错误消息也不是用户友好的。

总而言之,在创建开发应用并将公钥上传到那里之后,我们必须等待几个小时/几天,然后凭据最终将可用。

等待部分适用于打开的长篇故事应用果园开发帐户。


查看完整回答
反对 回复 2022-09-26
?
MM们

TA贡献1886条经验 获得超2个赞

似乎Epic有某种同步机制,每天运行一次。因此,在帐户创建后等待是唯一的解决方案。另请注意,在更改后的应用程序设置中,您还必须等待一段时间。Endpoint URI

当参数设置为类似时,也会显示错误。{ "error": "invalid_client", "error_description": null }redirect_urilocalhost:3000


查看完整回答
反对 回复 2022-09-26
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我也遇到了这个问题。就我而言,我使用“患者”作为为FHIR上的Epic SMART应用程序选择的“应用程序受众”。我能够在测试服务器上成功获取授权代码,但是当我尝试将其交换为访问令牌时,我收到“invalid_client”错误消息。


我犯的错误是,HTTP POST 中的redirect_uri必须是绝对 URL,并且必须与为应用指定的重定向 URI 匹配。如果重定向 URI 无效,则生成的错误消息将显示“客户端无效”(具有误导性)。


以下是我正在使用的Python代码的示例...


    data = {

        'grant_type': 'authorization_code',

        'code': request.GET.get('code'),

        'redirect_uri': 'http://127.0.0.1:8000/ehr_connection_complete/', # THIS MUST BE AN ABSOLUTE URL

        'client_id': '11111111-2222-3333-4444-555555555555',

    }

    response = post(url, data)

我觉得很奇怪的是,参数的错误会生成一条关于 的错误消息,但对于Epic的测试FHIR服务器来说也是如此。redirect_uriinvalid_client


我希望这些信息能帮助其他人。


查看完整回答
反对 回复 2022-09-26
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信