Slack Oauth:如果用户已经授权应用程序,则自动授权用户

Posted

技术标签:

【中文标题】Slack Oauth:如果用户已经授权应用程序,则自动授权用户【英文标题】:Slack Oauth: Automatically authorize user if user had already authorized app 【发布时间】:2020-02-17 02:41:17 【问题描述】:

我正在开发一个 Slack 应用程序,用户可以使用 Slack 的 Oauth 流程将其安装到工作区。安装和配置应用程序后,我使用 Oauth 允许用户登录并更改应用程序配置。

新用户的流程使用“添加到 Slack”按钮,该按钮要求用户同意允许 botidentity.* 范围,之后我的应用会检索并存储机器人和用户令牌。

现在我想允许同一用户使用“使用 Slack 登录”Oauth 流程登录。根据the Slack documentation,“使用 Slack 登录”流程只允许使用相同的 /oauth/authorize 端点,但只请求 identity.* 范围之一(我正在使用 identity.basic):

<a href="https://slack.com/oauth/authorize?scope=identity.basic&client_id=REDACTED">Sign in with Slack</a>

用户已经在初始应用安装时授权我的应用使用 botidentity.* 范围,但令人惊讶的是,他/她被重新提示确认允许我的应用在每个“使用 Slack 登录”上使用 identity.* 范围"行动。

slack 文档暗示后续登录尝试将导致自动重定向:

用户单击您的“使用 Slack 登录”按钮后,他们的网络浏览器应该会到达 Slack 的服务器。

当用户处理一些业务时,您的应用程序会耐心等待,或者 Slack 只是将它们发送回您的重定向 URL。

(强调我的)

但是,Slack总是要求用户(重新)授权我的应用程序使用 identity.* 范围。如何通过一键式流程让用户使用 Slack 登录?

更新:来自 Slack 的回应

我联系了 Slack 团队并得到了以下回复:

不幸的是,我们似乎需要更新文档,因为目前描述的内容并不准确。特别是:

回访用户不会因不必要的批准而分心,我们会尽快将他们送回您的网站、服务或应用!

由于我们对身份验证流程进行了更改,现在我们允许用户选择他们正在使用的工作区进行身份验证,我们再次向他们展示“范围”或“权限”页面。 这绝对是我们应该考虑改进的事情,但目前这是预期的行为,我们将修改文档以实现这一点。

很抱歉带来坏消息。

截至 2019 年 11 月 17 日,Sign in with Slack documentation 尚未更新。

【问题讨论】:

【参考方案1】:

如果您需要使用经过身份验证的 Slack 用户来实现链接到您的 Slack 应用程序的网页,您有两种选择:

使用 Slack 登录

一种方法是使用 Slack 登录来验证您网页的用户。这使您可以清楚地对用户进行身份验证。但是,缺点是用户每次再次打开此网页时都必须重复登录过程。这可以通过使用 cookie 来让用户在浏览器重新启动之间保持登录状态,直到他们手动退出 Web 应用程序来缓解这种情况。

请注意,此身份验证过程独立于登录到其 Slack 工作区的用户。

自己的认证

或者,您可以让用户直接从 Slack 打开您的网络应用,例如通过单击您提供的链接按钮。此 URL 需要包含允许您的 Web 应用程序获取用户当前上下文的信息,例如他的 Slack 和用户 ID。

请注意,此 URL 可能会被用户获取并可能被滥用,因此您需要添加措施来保护它,例如通过加密 ID 或添加安全哈希或一次性令牌...

【讨论】:

绝对是我的应用程序在用户登录时使用 cookie 来识别用户。他们注销后呢?我的应用程序会尽职尽责地清除 cookie,直到他们重新登录。我看到您已经回答了几个相同的问题:***.com/questions/37193395/…***.com/questions/46094760/… 您似乎缺少的是应用程序通常需要找出用户的目标他们已注销,但不需要新权限。 我想我完全理解您的要求。如果您的应用想要记住用户(例如,在他第二天重新启动浏览器之后),您不想清除 cookie。但是,在用户手动注销后,您不应该记住他。 这个接缝非常彻底地描述了这个过程:***.com/questions/17769011/… 在他退出后我们绝对不应该记住他。这就是为什么我们需要一个流程来让他重新登录。最好不要问他是否要允许我的应用程序访问他的身份,因为他已经授权我的应用程序访问他的身份。这是所有其他 Oauth 提供程序的工作方式,并允许一键登录。 当然。但正如我在回答中所说:这取决于您实施,例如通过使用 cookie。 Slack 不为​​您提供该功能。

以上是关于Slack Oauth:如果用户已经授权应用程序,则自动授权用户的主要内容,如果未能解决你的问题,请参考以下文章

spring boot oauth2.0 和 spring security:如何通过 facebook 或 slack 授予用户登录权限(权限)

Slack App Slash 命令 - 检测到无效签名(401 未经授权)

Slack API - 向个人空间(您)发送直接消息

OAuth 授权过程工作原理讲解

什么是OAuth2.0?

如何自动从 Slack 获取访问令牌?