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

我正在尝试在移动编程语言上实现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 key

signKey, err := jwt.ParseRSAPrivateKeyFromPEM([]byte(privateKey))

So(err, ShouldBeNil)


// construct jwt claims

now := 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 algorithm

alg := jwt.SigningMethodRS384

signedToken, err := jwt.NewWithClaims(alg, claims).SignedString(signKey)

So(err, ShouldBeNil)

log.Info("  => signed token", signedToken)


// prepare api call payload

payload := 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 call

req := 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 response

resBody := make(map[string]interface{})

err = json.Unmarshal(res.Body(), &resBody)

So(err, ShouldBeNil)


白衣染霜花
浏览 167回答 3
3回答

呼如林

太棒了,我现在让它工作了。解决方案只是在等待!这令人困惑,因为我在文档上找不到有关此内容的任何解释,并且错误消息也不是用户友好的。总而言之,在创建开发应用并将公钥上传到那里之后,我们必须等待几个小时/几天,然后凭据最终将可用。等待部分适用于打开的长篇故事和应用果园开发帐户。

MM们

似乎Epic有某种同步机制,每天运行一次。因此,在帐户创建后等待是唯一的解决方案。另请注意,在更改后的应用程序设置中,您还必须等待一段时间。Endpoint URI当参数设置为类似时,也会显示错误。{ "error": "invalid_client", "error_description": null }redirect_urilocalhost:3000

繁星点点滴滴

我也遇到了这个问题。就我而言,我使用“患者”作为为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我希望这些信息能帮助其他人。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go