http://twitter4j.org/en/code-examples.html - 如何在 OAuth 身份验证期间静态提供 Twitter PIN,代码示例讨论了提供 PIN(如果其已可用)。
我们的应用程序是一个独立的 java 应用程序,并且更愿意通过属性文件传递凭据,而无需任何人工干预。
最佳答案
Twitter 将为您提供 PIN 码。
在示例中,Twitter4J 假设某人将在 Web 浏览器中复制其提供的 URL(第 10 行为 requestToken.getAuthorizationURL()
),并通过浏览器对应用程序进行授权。之后,用户应该在示例程序中写入浏览器中显示的 PIN 码。
此示例有两个很大的缺点:
- 人为干预
- 如果 Twitter 不向您提供 PIN 码(如果您的 Twitter 应用程序的回调 URL 不是“
oob
”,就会发生这种情况),您将为示例程序提供哪个代码?
您必须模拟人工干预才能获取 PIN 码。不幸的是,Twitter4J 似乎没有方法来执行此操作(我在 Javadoc 中没有看到此类方法),因此您必须自己编写以下过程的代码:
- 检索网页的 HTML 代码
requestToken.getAuthorizationURL()
. - 此 HTML 页面包含一个表单,其中的一些参数将与用户名(或电子邮件)和用户密码一起发布,以获取 PIN 码。这些参数称为“
oauth_token
”(您已有的临时 OAuth token )、“deny
”(如果您不想授权应用程序则使用的标签)和“authenticity_token
”。全部都在<input>
中HTML 标签。选择它们。 - 模拟表单的发布。为此,您必须使用
POST oauth/authorize
端点。网址是https://api.twitter.com/oauth/authorize?oauth_token=<your OAuth Token>
。必须按照 the Twitter process for Authenticating requests 对请求进行身份验证。这是您将发布的内容:“authenticity_token=<the form's "authenticity_token" parameter>&session[username_or_email]=<user's name or email>&session[password]=<the user's password in clear>
”。如果您不授权该应用程序,请在正文消息中附加“&deny=<the form's "deny" parameter>
”。这对您来说不会有任何问题,因为您已经在属性文件中获得了凭据(session[xxx]
参数),并且您在表单中选择了其他参数(参见 2.)。 - Twitter API 将为您返回一个网页。如果授权成功,PIN 码就会在里面。不过,要小心。根据回调 URL,PIN 具有不同的名称。如果回调 URL 为“
oob
”,则 PIN 码称为OAuth PIN。它是<div id="oauth_pin">
中某处的 4 位数字。 HTML 标签。否则,它被称为OAuth Verifier。它包含在位于<div class="happy notice callback">
的 URL 中。 HTML 标签。在此 URL 中,PIN 为oauth_verifier
请求字符串的。它看起来像一个 OAuth token 。
请不要犹豫,看看我的过程的第二步和第四步的网页的 HTML 代码。了解这个过程非常有用。
关于java - 如何在 OAuth 身份验证期间静态提供 Twitter PIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079570/