gpt4 book ai didi

scala - 如何使用 scala play 为 OAuth1.0a 的 POST 签名?

转载 作者:行者123 更新时间:2023-12-01 23:09:39 24 4
gpt4 key购买 nike

我正在尝试使用 Scala 和 Play 2.2.0 实现 LTI 启动请求 ( http://www.imsglobal.org/LTI/v1p1/ltiIMGv1p1.html)。它基本上是带有表单参数和 OAuth 签名的 HTTP POST。

我可以成功签署 POST,但前提是未添加 POST 正文。 “OAuthCalculator”类在计算签名时似乎没有使用 POST 正文。

这不会计算出正确的签名。



val params = Map(
"lti_message_type" -> Seq("basic-lti-launch-request"),
"lti_version" -> Seq("LTI-1p0"),
"launch_presentation_return_url" -> Seq("http://lms.com"),
"resource_link_id" -> Seq("1023"))

WS.url("http://myservice:56024/widget")
.sign(OAuthCalculator(key, RequestToken(null, null)))
.post(params)

如果没有给 POST 正文,它会正确计算它们。



WS.url("http://myservice:56024/widget")
.sign(OAuthCalculator(key, RequestToken(null, null)))
.post("")

我故意传递一个空的请求 token ,因为我希望计算器仅执行 OAuth 签名。

是否有另一种添加 POST 正文的方法或另一种让库签署请求的方法?

最佳答案

OAuth Signpost 似乎无法使用 Scala Play 2.0 中使用的标准 HTTP 请求库对消息正文中包含的 POST 参数进行签名。 https://code.google.com/p/oauth-signpost/wiki/GettingStarted#Signing_an_HTTP_message_using_OAuthConsumer请参阅说明为什么不能在签名中包含 POST 消息正文的部分中的注释。

我通过使用 Apache HTTP 客户端进行同步调用来解决这个问题。



val params = new util.ArrayList[BasicNameValuePair](1)
params.add(new BasicNameValuePair("lti_message_type", "basic-lti-launch-request")

val consumer = new CommonsHttpOauthConsumer("key", "secret")

val post = new HttpPost("http://stackoverflow.com:8080/service")
post.addHeader("Content-Type", "application/x-www-form-urlencoded")
post.setEntity(new UrlEncodedFormEntity(params))

consumer.sign(post)

关于scala - 如何使用 scala play 为 OAuth1.0a 的 POST 签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20576298/

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