Azure active directory 可靠地识别团队来宾用户

Azure active directory 可靠地识别团队来宾用户,azure-active-directory,single-sign-on,microsoft-teams,Azure Active Directory,Single Sign On,Microsoft Teams,我有一个Microsoft团队选项卡应用程序,我正在使用SSO进行身份验证。我的用户是本地人和来宾。我的要求是根据传入用户的类型(本机/来宾)显示不同的屏幕,因此我必须首先确定用户类型。为了确保安全性,我首先获取传入用户的id令牌,然后在识别用户类型之前首先验证它。是否有可靠的方法仅使用id令牌来识别传入的用户类型?我不信任选项卡上下文中的信息。您可以使用microsoft graph api(测试版) 如果id标记包含用户的objectId,只需将objectId作为此api的参数。在响应中,

我有一个Microsoft团队选项卡应用程序,我正在使用SSO进行身份验证。我的用户是本地人和来宾。我的要求是根据传入用户的类型(本机/来宾)显示不同的屏幕,因此我必须首先确定用户类型。为了确保安全性,我首先获取传入用户的id令牌,然后在识别用户类型之前首先验证它。是否有可靠的方法仅使用id令牌来识别传入的用户类型?我不信任选项卡上下文中的信息。

您可以使用microsoft graph api(测试版)

如果id标记包含用户的objectId,只需将objectId作为此api的参数。在响应中,我们可以找到一个属性
userType
。此属性的值可以是
Member
Guest

如果id令牌不包含用户的objectId,则只包含电子邮件。我们也可以将其作为参数放在graph api中,但是如果电子邮件是来宾用户,api将不会获得响应数据。所以我问你评论中是否包含objectId

顺便说一下,属性
userType
仅存在于microsoft graph api的beta版中,而不存在于1.0版microsoft graph api中。因此,如果您对测试版不满意,我建议使用Azure AD graph api()而不是Microsoft graph api


希望它有帮助~

如果您不想使用Microsoft Graph API,您可以将所有来宾用户添加到安全组中,并按照说明将组声明包含在您的令牌中。您只需修改应用程序清单中的“groupMembershipClaims”字段:

"groupMembershipClaims": "SecurityGroup"
然后ID令牌将包含使用所属组的ID,如下所示:

{
  "groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}

您也可以。

Hi Perumal,您能不能请您的id令牌并分享它的示例(或屏幕截图),我想看看其中是否有任何字段可以帮助解决此问题(请涵盖您的id令牌的敏感信息)。Hi Perumal,我能知道此问题是否已解决?我只是想知道您的id令牌是否包含用户的objectId或用户名(电子邮件)?感谢@HuryShen对此进行跟踪。我可以随时检查用户名/电子邮件地址,但我不认为这是一种可靠的方式来识别客人,因为它可能来自多个域。我要寻找的是某种AAD属性,它将传入用户标识为来宾,因为AAD中的来宾用户实际上是作为“来宾用户”创建的。您好,我认为我们不能仅仅通过id令牌直接区分用户。我想提供的是一个解决方案调用一个api,其中包含来自id令牌的参数(email或objectId),并且在其响应中有一个属性(aad属性),可以帮助我们区分用户是否是来宾。您接受这种方式吗?如果您接受这种方式,请您的id令牌并确认它是否包含用户的“objectId”,因为使用“objectId”比使用“email”要好。谢谢,但不幸的是,根据我们的安全指南,此解决方案不适用于我,我们不允许作为来宾用户调用graph api。Hi@PerumalPerumal根据我的理解,您不希望来宾用户调用graph api。但是,当它完成SSO并使用objectId或email获取id令牌时,您可以使用本地用户(验证访问令牌)在代码中调用graph api(使用参数“objectId”或id令牌中的“email”)。如果我误解了你的要求,请让我知道。我们的应用程序的工作方式,你建议的方法可能是不可能的。在我的代码中,我有一个对来宾和内部用户都通用的登录页。我使用id令牌验证传入用户,然后根据传入用户的类型分支到不同的视图。在这里,我使用一些特殊的方法识别用户类型,然后将它们发送到不同的页面视图。现在,当来宾用户尝试登录时,用户上下文将显示来宾的名称。在这个场景中,如何在内部用户的上下文中调用graph api?非常感谢您的输入。此解决方案有效,但我们的客户用户群是动态的。虽然它是通过注册过程进行管理的,但在任何时候都可能有成千上万的客户加入和离开我们的应用程序。一次性将他们全部添加到一个组中是可以的,但是每次有新的来宾时,我们的管理员都会有很大的操作开销。让我考虑一下,您可以创建一个动态组:。添加规则以将来宾动态添加到此组。再次感谢。当我考虑您建议的AAD功能中的动态组时,现在,我使用的逻辑取决于id_令牌的“upn”字段的存在。似乎来宾没有这个字段,只有内部用户do@PerumalPerumalp请问您为什么需要使用
upn
?你能描述一下你的场景吗?这样我就可以知道是否有解决办法了。实际上,我没有任何强制使用“upn”属性的冲动。我所要做的就是尝试从获取的id_令牌中唯一地将传入用户标识为来宾。当我检查JWT id_令牌时,我发现“upn”属性只存在于内部用户中,而不存在于来宾用户中。这就是我决定使用它的原因。如果有更好的方法处理这个问题,我非常愿意尝试一下。
{
  "groups": ["1ce9c55a-9826-4e32-871c-a8488144bb32"]
}