特定租户的azure ADAL授权代码授予流

特定租户的azure ADAL授权代码授予流,azure,oauth-2.0,adal,Azure,Oauth 2.0,Adal,我使用以下代码: var stateId = Guid.NewGuid().ToString(); var stateParam = "&state=" + stateId; var tenantId = "XXXXXXXXXXXXXXXXXXXX"; var clientId = "XXXXXXXXXXXXXXXXXXXXXXX"; var authority = String.Format(Culture

我使用以下代码:

        var stateId = Guid.NewGuid().ToString();
        var stateParam = "&state=" + stateId;
        var tenantId = "XXXXXXXXXXXXXXXXXXXX";
        var clientId = "XXXXXXXXXXXXXXXXXXXXXXX";
        var authority = String.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}", tenant);

        AuthenticationContext authContext = new AuthenticationContext(authority);
        var authorizationUrl = authContext.GetAuthorizationRequestURL("", clientId, redirectUri, UserIdentifier.AnyUser, stateParam).AbsoluteUri;
对于web应用程序,在回调/重定向url中获取访问令牌

它很好用。但我注意到一些奇怪的事情

在上面的代码中,我为授权指定了tananti,它是我的azure帐户A中的azure active directory之一

我还有另一个azure帐户B,它与A完全无关。但是,当我在浏览器中登录到帐户B,然后运行上述代码时,它也会返回一个有效的a代码,我可以使用AcquireTokenByAuthorizationCodeAsync调用获取访问令牌,使用我指定的tenantId,但将DisplayableId作为帐户B中的用户之一


我的理解是,由于我在授权中指定了tenantId,它应该只授予该租户中的用户,如何授予另一个租户中的用户?

该租户确定必须颁发令牌的租户。这并不一定意味着它必须是验证用户身份的同一租户。如果租户B中的用户已在租户a中注册为来宾,则它有可能成功从a获取代码和令牌。

当您说租户B中的用户已在租户a中注册为来宾时,这到底意味着什么?该用户是否必须列在租户A下?我如何从门户网站了解租户B下的用户是否在租户a中注册为来宾?我检查了我的租户A,该用户不在列表中。您完全按照您所描述的进行查找-从门户打开租户A中的用户列表,然后查看B中的用户是否在列表中。请注意,这与用于与MSA用户集成的机制相同。如果没有列出客人,我建议您将代码兑换成代币,并查看内容。您可以将更多详细信息发送到,我很乐意帮助解决问题。我检查了我的帐户,租户B的用户未列在租户A下。租户A位于组织帐户(我的公司帐户)下。租户B使用Microsoft帐户(我的个人帐户)。我很快就会把代币寄给你。谢谢