在Slack上为用户添加权限

时间:2018-07-16 16:06:07

标签: slack slack-api

当用户使用“登录到松弛”按钮登录到松弛状态时,我们如何为用户添加更多范围/权限。我在Slack App的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;
            }

        }

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

如果您确实希望自己的网站能够代表多个用户采取行动(例如发布Slack消息),那么您需要做的就是

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

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

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