SE在Emacs中的OAuth工作流程

Sea*_*red 10 emacs elisp oauth-2.0 stackexchange-api

正在取得进展迅速StackMode,Emacs的客户端StackExchange,现在我们需要的是能够使认证的请求,为继续测试API.(300请求限制开始限制我一天可以做多少测试.)

免责声明:我知道知之甚少Web开发; 这是我正在专业领域的一个领域.如果我滥用任何条款,请随时在评论中纠正我,请原谅.谢谢!

StackExchange API使用OAuth 2.0身份验证.由于这是具有客户端授权的本地客户端应用程序.我有StackExchange提供给我的以下信息:

  • 客户ID
  • 客户端密钥(不得共享,因此在此流程中不应该是必需的)
  • 说明(与OAuth无关)
  • OAuth域
  • 申请网站(不是OAuth相关)
  • 应用程序图标(不与OAuth相关)
  • Stack Apps Post(不与OAuth相关)

以下额外信息:

  • 客户端流程已启用
  • 桌面OAuth重定向Uri已启用

为了保持常规和显式的任何答案,您可以使用my-client-id(等)值.实际值 - 我认为我可以分享的那些,可以在GitHub上找到.


半天我一直在研究这个问题,但是我的解决方案并不比我开始时更接近.我得到的最接近的是这段代码:

(require 'oauth2) ; available via GNU ELPA
(defconst stack-auth-token
  (make-oauth2-token
   :client-id stack-auth--client-id
   :client-secret stack-auth--key))

;; this doesn't use the above, but it does open an auth page on SE
(oauth2-auth-and-store
 "https://stackexchange.com/oauth/dialog"
 nil nil
 stack-auth--client-id
 stack-auth--key
 "https://stackexchange.com/oauth/login_success")
Run Code Online (Sandbox Code Playgroud)

我提供OAuth2请求的唯一事情(从上面)显然是

  • 客户ID
  • OAuth域

如何在Elisp中实现此流程?


当前'流动'

  1. 执行oauth2-auth-and-store适当的变量设置.
  2. 打开

    AUTH

  3. 点击"批准"
  4. 打开

    页

    使用此URL

    网址

  5. 该应用程序已成功添加

    添加

  6. 但我没有提供的代码 oauth2

    提示

除了答案,当然也欢迎PR.

Nat*_*man 2

我会尽力回答这个问题。我对 Lisp 一无所知,但对 Stack Exchange API 和授权流程非常熟悉。

\n\n
\n

“300 个请求的限制开始限制我一天可以进行的测试量。”

\n
\n\n

您可以通过将 API 密钥附加到方法 URL 的查询字符串 ( ) 将此限制升级到每天 10,000 次查询&key=...

\n\n
\n

“我认为可以分享的实际值\xe2\x80\x94可以在 GitHub 上找到。”

\n
\n\n

是的,您可以安全地共享这些值,因为任何带有这些值的应用程序都可以轻松地进行逆向工程或反编译以提取这些值。

\n\n
\n

“4. 使用此 URL 打开 [...] 页面 [...]”

\n
\n\n

这是有意的行为。在您的屏幕截图中,授权成功,并且 URL 的哈希值包含访问令牌。您将需要此令牌来访问某些方法,例如/inbox.

\n\n

你可能想要做的事情看起来像这样:

\n\n
    \n
  1. 继续您一直在做的事情,直到完成示例中的步骤 #4。
  2. \n
  3. 在 Emacs 中提示用户当前显示的 URL。他们将按原样复制并粘贴它。
  4. \n
  5. 提取哈希值(最右边的“#”之后的所有内容)并像解析查询字符串一样解析它。access_token 参数包含您需要的值。
  6. \n
  7. 每当调用受保护的方法时,请使用access_tokenkey(API 密钥)参数。
  8. \n
\n