当前位置: 首页 > 知识库问答 >
问题:

在Java生成OAuth签名

蓬化
2023-03-14

我正在开发java web应用程序,现在我正在尝试将我的网站与QTIWorks连接起来

我有一个消费者密钥和秘密,我需要生成OAuth签名通过线性时不变系统与QTIWorks连接

<html>

<head> </head>

<body>
<form action="https://webapps.ph.ed.ac.uk/qtiworks-dev2/lti/domainlaunch" name="ltiLaunchForm" id="ltiLaunchForm" method="post" target="basicltiLaunchFrame" enctype="application/x-www-form-urlencoded" style="display: block;">
   <input type="hidden" name="context_id" value="cid-00113">
   <input type="hidden" name="context_label" value="SI106">
   <input type="hidden" name="context_title" value="Design of Personal Environments 1">
   <input type="hidden" name="ext_note" value="Instructor from first course">
   <input type="hidden" name="launch_presentation_locale" value="en_us">
   <input type="hidden" name="lis_person_contact_email_primary" value="sian@imscert.org">
   <input type="hidden" name="lis_person_name_family" value="Instructor">
   <input type="hidden" name="lis_person_name_given" value="Siân">
   <input type="hidden" name="lis_person_sourcedid" value="school.edu:user">
   <input type="hidden" name="resource_link_description" value="This learning space is private">
   <input type="hidden" name="resource_link_id" value="res-0012612">
   <input type="hidden" name="resource_link_title" value="My Weekly Wiki">
   <input type="hidden" name="roles" value="Instructor">
   <input type="hidden" name="tool_consumer_info_product_family_code" value="sakai-unit">
   <input type="hidden" name="tool_consumer_info_version" value="0.9">
   <input type="hidden" name="tool_consumer_instance_description" value="University of School (LMSng)">
   <input type="hidden" name="tool_consumer_instance_guid" value="lmsng.school.edu">
   <input type="hidden" name="user_id" value="user-0016">
   <input type="hidden" name="oauth_callback" value="about:blank">
   <input type="hidden" name="lis_outcome_service_url" value="....">
   <input type="hidden" name="lis_result_sourcedid" value="{&quot;zap&quot; : &quot;Siân JSON 1234 Sourcedid <>&amp;lt;&quot;}">
   <input type="hidden" name="custom_simple_key" value="custom_simple_value">
   <input type="hidden" name="custom_complex____________key" value="Complex!@#$^*(){}[]½Value">
   <input type="hidden" name="lti_version" value="LTI-1p0">
   <input type="hidden" name="lti_message_type" value="basic-lti-launch-request">
   <input type="submit" name="ext_submit" value="Finish Launch">
   <input type="hidden" name="oauth_version" value="1.0">
   <input type="hidden" name="oauth_nonce" value="505005bff1c2cf2e1750ed914e489a9b">
   <input type="hidden" name="oauth_timestamp" value="1427022367">
   <input type="hidden" name="oauth_consumer_key" value="my consumer key">
   <input type="hidden" name="oauth_signature_method" value="HMAC-SHA1">
   <input type="hidden" name="oauth_signature" value="I need generate this value">
   <input type="hidden" name="ext_submit" value="Finish Launch">
   <input type="submit" name="submit" value="submit"></form>


<iframe name="basicltiLaunchFrame" id="basicltiLaunchFrame" src="" width="100%" height="900" scrolling="auto" frameborder="1" transparency="">

</iframe>
</body>

我需要在这行生成OAuth签名

<input type="hidden" name="oauth_signature" value="I need generate this value">

我该怎么做?

共有2个答案

陆宾白
2023-03-14

你可以使用Sakai线性时不变系统代码(开源Apache)来做签名,我已经提取了Sakai线性时不变系统实现的可移植位在:

https://github.com/tsugiproject/tsugi-util

该工件甚至在Sonatype中,因此您可以将其添加到maven配置中——github的自述文件中有文档。您要寻找的是两种方法:

>

生成超文本标记语言表单并自动提交

https://github.com/tsugiproject/tsugi-util/blob/master/src/java/org/tsugi/basiclti/BasicLTIUtil.java

这些方法有很多参数,但通过这种方式,它们与Java应用程序的任何存储或其他方面都非常独立。

臧欣怿
2023-03-14

用JavaScript做到:

document.getElementById("oauth_signature").value = "Value you want to generate";

编辑:

您可以使用加密算法库(例如https://code.google.com/p/crypto-js/)来计算oauth签名:

var key = document.getElementById("oauth_consumer_key").value
var hash = CryptoJS.SHA1(key);
document.getElementById("oauth_signature").value = hash

根据oauth_signature_方法的值,您应该使用适当的加密算法。

switch(document.getElementById("oauth_signature_method").value) {
    case "HMAC-SHA1":
        var hash = CryptoJS.SHA1(key)
        break;
    case "HMAC-SHA-2":
        var hash = CryptoJS.SHA256(key)
        break;
    case ...
}
 类似资料:
  • 我写一个oauth与twitter的代码,我有401错误代码和"失败验证oauth签名和令牌"响应从twitter当我获取后请求到https://api.twitter.com/oauth/request_token.这是我的数据,我有: 我的步骤: 1.为签名准备的字符串 2.通过代码创建签名qQwIvFao9yeIQpi9ouz0oFi7/v8=: 3.最终授权标头(带转义引号): 问那些可能

  • 我需要使用SpringRestTemplate(绑定了一个代理)从AWS SQS获取消息,而不是AWS sdk或SpringCloud AWS消息,因为该公司存在一些代理问题。 我需要生成一个头字符串,其中包括这样的授权签名; 我需要用java生成这个signaturewith并绑定到HttpHeaders对象。 我更喜欢使用rest模板,因为在添加下面这样的代理时使用aws sdk是行不通的。应

  • 当我从REST客户端调用APIendpoint时,由于涉及Signature而出错。 请求: 主持人:https://xxx.execute-api.ap-southeast-1.amazonaws.com/latest/api/name 授权: AWS4-HMAC-SHA256凭据=/20160314/ap-东南-1/执行-api/aws4_request, SignedHeaders=host

  • 最近我需要在Java中使用RSA对一个字符串进行签名,并在C++中验证签名。 在Java,现在我认为一切都是好的,我创建了public.keystore和private.keysore,可以成功地对数据进行签名和veify。但是当我试图用C++验证它时,它显示签名失败。 这是我的Java代码,在Java,我将数据签名到base64String,并将其保存在我的本地文件中,保存为“sig.dat”,

  • 我正在尝试构建我的第一个签名APK以供发布,但出现了一些错误。看起来效果很好,但现在我就是无法生成APK。我做了研究,但什么也没找到。 Gradle版本:4.8,Android插件版本3.1.4,这是我的应用程序Gradle屏幕截图:link 这来自assembleDebug: 我曾经有过布局和不赞成使用的功能的其他问题,但我解决了它。其中一个就这样消失了,但我什么也没做:-) 我已经尝试过的事情

  • 如果你想把自己的资源发放给第三方用户访问,但是又不想开放Bucket的读权限,可以通过生成预签名URL的形式提供给用户一个临时的访问URL。在生成URL时,你可以指定URL过期的时间,从而限制用户长时间访问。 生成一个预签名的URL 如下代码: String bucketName = "your-bucket-name"; String key = "your-object-key"; // 设