Oauth 2.0 如果用户不是’;你没有登录到我的应用程序吗?

Oauth 2.0 如果用户不是’;你没有登录到我的应用程序吗?,oauth-2.0,slack-api,Oauth 2.0,Slack Api,Slack提供了创建一个安装应用程序的工具的能力 保存直接安装URL时,Slack将尝试向声明的URL发送一个简单的HTTP GET请求。如果它没有检测到指向完全限定slack.com/oauth/authorize URL(见下文)的HTTP 302重定向,您将收到一个错误通知 First Slack将用户发送到您的直接安装URL: GET /slack/direct_install HTTP/1.1 Host: example.com 然后,您的服务器会重新定向回Slack的OAuth

Slack提供了创建一个安装应用程序的工具的能力

保存直接安装URL时,Slack将尝试向声明的URL发送一个简单的HTTP GET请求。如果它没有检测到指向完全限定slack.com/oauth/authorize URL(见下文)的HTTP 302重定向,您将收到一个错误通知

First Slack将用户发送到您的直接安装URL:

GET /slack/direct_install HTTP/1.1
Host: example.com
然后,您的服务器会重新定向回Slack的OAuth 2.0授权页面:

HTTP/1.1 302 Found
Location: https://slack.com/oauth/authorize?client_id=12345.67890&scope=channels%3Ahistory%20users%3Aread&state=abcdefg
导致用户直接进入授权。消除了一个摩擦点

您可以根据需要继续生成自己的时间或上下文敏感状态参数以及特定的、预先注册的重定向uri值

这如何与我自己的应用程序用户身份验证集成?正如我所读到的,直接安装URL必须始终302重定向到Slack OAuth页面。如果用户在单击“安装”按钮时没有登录到我的应用程序,我该怎么办

我最好的猜测是我应该:

  • 始终重定向到Slack OAuth URL并生成状态参数以跟踪请求
  • 当用户完成身份验证时,将使用
    code
    state
    参数重定向回用户
  • 如果他们没有登录,请要求他们登录,并保留OAuth
    code
    state
    参数。用户登录后,继续OAuth身份验证过程
  • 是这样吗?在尝试安装Slack应用程序之前,是否有办法强制用户登录到我的应用程序


    出于安全考虑,为了使其与会话cookie一起工作,我认为需要将它们设置为SameSite=lax,而不是=strict。当跨域请求设置为strict时,cookie不会从该请求中传递。

    我认为您有两种选择:

    1)不要使用它。

    “直接安装”功能是标准“松弛按钮”安装过程的快捷方式。因为在你的情况下,用户无论如何都需要先登录你的应用程序,我认为在你的网页上的相同上下文中也提供Slack按钮会更方便用户

    2)返回错误

    如果您检测到用户未登录到您的应用程序,您可以将错误返回到Slack,例如http代码500。Slack还应该向用户返回一个错误(不确定它看起来如何)。如果你将此与Slack应用程序安装页面上的明确信息结合起来,说明需要首先登录到你的应用程序才能工作。这是最容易实现的方法,但也是最不友好的方法

    3)延迟登录后请求登录应用程序

    完成Oauth过程并确认用户未登录到您的应用程序后,您可以请求用户登录以完成安装过程。这里的缺点是,您的应用程序可能已经安装,如果用户此时未能登录,则可能处于不可用状态

    4)暂停用户登录的Oauth进程


    正如您所建议的,您可以在收到授权代码后停止Oauth进程,并请求用户登录您的应用程序。然后在用户成功登录后继续Oauth过程。如果您需要考虑授权代码将在10分钟后过期,则可以使用此功能。我看不出有任何方法可以强迫用户在单击“直接安装”按钮之前登录。

    对不起,我澄清了我的问题,我说的是用户是否登录到我的应用程序,而不是Slack。啊。根据你的澄清,我更新了我的答案。这些选项都有意义。我不知道2是否有效,因为Slack本身验证了当他们从服务器请求安装链接时是否发送了302,但其他的都是不错的选择。我认为第4步可能是最正确的,但也是最有效的!