如何为多个公司使用同一帐户(就像可以将同一帐户用于Slack上的多个工作区一样)

时间:2019-01-23 07:48:32

标签: authentication web oauth-2.0 slack asana

我正在开发基于Google App Engine(GAE)的Web应用程序。该应用程序的要求是一个用户可以与多个公司帐户关联。

我的应用程序有两种主要的帐户类型。一个是该管理员/公司的主要帐户。其他是员工帐户(即在公司下工作的人员)。现在,我想做的是允许一个雇员在多个公司下工作,但是他不必为每个公司单独设立一个帐户。他的单个帐户可以与多个公司关联。

我探索了已经支持此功能的不同平台。我发现的主要是Slack和Asana。我的问题可以完美地映射到Slack现在正在做的事情,即我在Slack上创建了一个帐户,并且可以使用该单一帐户在Slack上加入多个工作区。

我也想在我的应用程序中实现相同的目的。我很好奇Slack现在如何支持此功能?它是否将每个请求都发送一些ID到服务器,以指示刚刚完成的活动与此ID下的工作空间相关联?还是每个工作空间都具有某种独特的令牌(在Slack API级别上)?

我的应用程序中确实有这样的模型。唯一的auth_token与每个公司帐户关联。因此,我认为,当一名员工想要为特定公司开展活动时,他会将带有请求的唯一令牌发送到服务器,以便服务器知道该活动是针对哪家公司进行的。

有人知道实现此目标的最佳方法是什么吗?

1 个答案:

答案 0 :(得分:1)

这里有两个不同的概念在起作用:

帐户与公司/工作空间之间的关系

Slack帐户的数据结构经过设计,可以链接到多个Slack工作区,例如在SQL中,帐户和工作空间表之间将有很多很多关系。

保持登录状态

Slack和其他单一登录提供的方式(例如Google SSO)可让您保持登录状态,方法是设置浏览器cookie。该Cookie通常是某种加密哈希,如果Cookie丢失/无效,SSO提供程序将使用它来识别当前用户所属的帐户或通过OAuth请求登录。

这也可以部分通过服务器会话(也使用cookie)来实现。使用服务器会话比实现自己的(安全)cookie解决方案更容易实现,但是只要浏览器保持打开状态,用户就只会保持登录状态。但这对于大多数解决方案来说应该足够了。

请注意,Slack API的令牌的工作方式非常不同。例如必须根据工作区,用户和应用生成它们。