【问题标题】:Add permissions for user on Slack在 Slack 上为用户添加权限
【发布时间】:2018-12-24 05:55:16
【问题描述】:

当用户使用登录 Slack 按钮登录 Slack 时,我们如何为他添加更多范围/权限。我在我的 Slack 应用程序的 Outh 权限/范围中添加了范围。它适用于主要所有者,但不适用于其他用户。 我有一个类似的问题here。我想我知道我必须添加权限,但无法弄清楚如何。我尝试将其添加到使用 Slack 按钮登录的初始 oauth 流程中,但它说我不允许将其他范围与 identity.basic 一起使用。

  <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <a href="https://slack.com/oauth/authorize?scope=identity.basic,identity.email,identity.team,identity.avatar&client_id=373568302675.374024189699">
                        <img alt="Sign in with Slack" height="40" width="172" src="https://platform.slack-edge.com/img/sign_in_with_slack.png"
                             srcset="https://platform.slack-edge.com/img/sign_in_with_slack.png 1x, https://platform.slack-edge.com/img/sign_in_with_slack@2x.png 2x" />
                    </a>
                </div>
            </div>

谁能告诉我应该在哪里为非主要所有者的用户添加权限?

我在cshtml上又做了一个按钮如下:

<input type="button" value="Authenticate again to send Message" class="btn btn-warning" onclick="location.href = 'https://slack.com/oauth/authorize?scope=incoming-webhook,im:write,chat:write:user&client_id=373568302675.374024189699'"/>

然后单击它会导致与使用 Slack 登录相同的功能,如下所示:

public SlackAuthToken GetAccessToken(ProgramParameter startParam, string clientId, string clientSecret, string code)
        {
            using (var client = new WebClient())
            {
                string apiUrl = GetApiUrl(startParam);
                string url = apiUrl + "/oauth.access?client_id=" + clientId + "&client_secret=" + clientSecret + "&code=" + code;
                var response = client.DownloadString(url);

                SlackAuthToken slackTest = JsonConvert.DeserializeObject<SlackAuthToken>(response);
                string accessToken = slackTest.AccessToken;
                string urlUserIdentity = "https://slack.com/api/users.identity?token=" + accessToken;
                var responseUser = client.DownloadString(urlUserIdentity);
                SlackAuthToken slack = JsonConvert.DeserializeObject<SlackAuthToken>(responseUser);
                return slackTest;
            }

        }

【问题讨论】:

    标签: slack slack-api


    【解决方案1】:

    您必须更改 URL 中的范围参数。您不能将identity.* 范围与其他范围组合使用,请尝试使用identify

    identity.* 仅用于身份验证,不用于安装应用程序/机器人/命令。

    【讨论】:

    • 如何在同一个身份验证流程中添加两个范围?检查我对this 问题的评论。我是编码和 Slack api 的新手,如果你能在这里帮助我,我将不胜感激。
    【解决方案2】:

    “使用 Slack 登录”功能并不是要授予用户使用 Slack 的权限,而是要在第三方网站上对现有的 Slack 用户进行身份验证。

    如果您想从您的网站访问 Slack API 方法,您需要通过一个由管理员安装一次的 Slack 应用程序来执行此操作,该应用程序将为您提供一个访问令牌,该令牌具有 Slack 应用程序定义和请求的权限。但这通常不是代表用户工作,而是作为它自己的实体,即 Slack 应用程序。

    另请参阅this answer,以更好地了解“使用 Slack 登录”和“添加到 Slack”之间的区别。

    如果您真的希望您的网站能够代表多个用户执行操作(例如发布 Slack 消息),那么您需要这样做:

    1. 您的每个用户都需要使用“添加到 Slack”Oauth 流程并获得所有必要的权限来安装您的 Slack 应用程序。这在 Slack 中称为“配置”。

    2. 您的应用需要收集并存储从每次安装中收到的访问令牌

    3. 然后您的网站可以使用“使用 Slack 登录”来识别用户,并假设已创建“配置”,为该用户的每个后续 API 调用使用匹配的访问令牌(来自 #2)(例如代表他发送消息)

    【讨论】:

    • 我从 Slack 收到如下回复:SIWS(使用 Slack 登录)范围不能与同一 Oauth 流程中的非 SIWS 范围组合,因此用户需要通过 Oauth 流程具有两次 SIWS 范围的应用程序: 1. 首先,只有身份。* 范围和 2.其次,没有非 SIWS 范围。但是,我不明白如何拥有两个范围。我是添加另一个 api 调用来进行 chat:write 还是以某种方式在按钮的 cshtml 代码中添加它。那么,是否可以不添加 Slack 按钮而仍然执行上述操作?
    • 没有。每个用户都需要先使用“添加到 Slack”安装您的 Slack 应用程序一次。这就是您的网站如何获得具有用户权限的令牌的方式。之后,用户可以使用 SIWS 登录您的网站。您的网站可以使用之前存储的令牌代表用户发布 API 方法
    • 我添加了一个常规按钮并将其重定向到以下网址:slack.com/oauth/…> 并再次通过 Oauth 步骤,我能够让所有用户将消息发送给其他人。我没有使用 Add to Slack 按钮。但是,功能保持不变。应该那么我为此发布答案?感谢您的意见,它帮助我向 Slack 团队提出了一个更好的问题。
    • 这会起作用,但现在每次有人点击按钮时,您都会重新安装您的 Slack 应用程序。你确定那是你想要的吗?使用我上面概述的方法,您只需安装一次。但如果这是你想要的方法:是的,请把它作为答案
    • 我确实保存了单击按钮的用户的访问令牌。每次有人点击它都会导致重新安装吗?抱歉,我想了解常规按钮与添加到 Slack 按钮有何不同。我正在更新上面的问题以显示我的代码。我不想一遍又一遍地重新安装应用程序。
    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2010-12-24
    • 2020-02-28
    • 2014-02-20
    • 1970-01-01
    • 2019-08-31
    • 2013-03-08
    相关资源
    最近更新 更多