您好我正在尝试从网页登录用户Box.com。我用一个简单的HTML表单提交了第一部分:
<form action="https://www.box.com/api/oauth2/authorize" type="POST" enctype="application/x-www-form-urlencoded">
<input type="text" name="response_type" value="code">
<input type="text" name="client_id" value="[REMOVED]">
<input type="text" name="state" value="vexhax97td8xf_SomeTemporaryValueForTesting">
<input type="submit">
</form>
这很好用,我使用javascript从查询参数中获取授权代码。然后我尝试相同的东西来获取访问代码(在页面加载时通过javascript设置auth-code):
<form action="https://app.box.com/api/oauth2/token" type="POST" enctype="application/x-www-form-urlencoded">
<input type="text" name="grant_type" value="authorization_code">
<input id="auth-code" type="text" name="code" value="">
<input type="text" name="client_id" value="[REMOVED]">
<input type="text" name="client_secret" value="[REMOVED]">
<input type="submit">
</form>
但是我收到“无效的grant_type参数或参数缺失”错误。另外,无论如何,这都不是一个很好的用户体验来展示响应json。我试过没有enctype="application/x-www-form-urlencoded"
并得到同样的错误。
Box教程使用curl,显然不是网页上的选项。如何在不遇到“无效...”错误的情况下获取访问令牌,是否有办法通过幕后的JavaScript进行此操作?
答案 0 :(得分:0)
对于访问令牌交换的授权码,缺少“redirect_uri”参数。但这不是真正的问题。
交换应该在服务器端进行,而你在客户端(浏览器)进行交换。也许你可以通过AJAX调用进行交换以正确处理JSON回复,但前提是box.com允许CORS(我怀疑)。
这样你也可以在你的网页上公开你的client_id和client_secret(那么为什么你会犹豫在stackoverflow上发布它?)。