我目前正在升级应用程序,以实现多租户和B2B集成。
到目前为止,我有以下类型的用户在工作:
我现在正在尝试通过执行以下过程来允许任何域的用户访问我的应用程序:
在这种情况下,abc.com是外部合作伙伴。外部合作伙伴是动态的,并通过“域白名单”通过应用程序进行管理。因此,我现在可以拥有abc.com,以后再拥有abcd.com,xyz.com等。这些列入白名单的域中的用户正在通过应用程序URL自注册。
足够有趣的是,gmail用户可以正常工作,所以我假设该流行域存在内部Azure AD白名单?
更新:
Gmail帐户正常运行的原因是,它们确实在我的Azure AD中创建为Microsoft帐户。另一方面,abc.com域帐户被创建为“外部Azure Active Directory”帐户。 (来源属性)
更新#2:
经过更多研究后,我发现它不起作用是因为我使用的公共端点不支持访客。 此处有更多详细信息: Can users from an unmanaged Azure AD directory, sign into an Azure AD multi-tenant application which resides in a different directory?
现在,我切换到使用租户特定的端点,如下所示:
Tenant specific endpoint: https://login.microsoftonline.com/{tenant-id}/v2.0
我可以从abc.com用访客用户登录
但是Microsoft帐户现在停止工作了。
AuthorizationCodeReceived = async (context) =>
{
...
var cca = new ConfidentialClientApplication(appId, redirectUri,
new ClientCredential(appSecret),
new SessionTokenCache(signedInUserID, context.OwinContext.Environment["System.Web.HttpContextBase"] as HttpContextBase));
await cca.AcquireTokenByAuthorizationCodeAsync(scopes, code);
},
等待cca.AcquireTokenByAuthorizationCodeAsync(作用域,代码)失败,并显示以下错误:
ErrorCode: invalid_grant
Message=AADSTS50020: MSA guest token redemption attempt on v2 common endpoint.
如何使它与来自自定义域(abc.com)和现有Microsoft帐户的来宾用户一起使用?
答案 0 :(得分:0)
原因:
您未获得abc.com
租户的多租户应用的用户或管理员同意。也许该租户的设置不允许用户同意,只有管理员可以同意。
对于多租户应用程序,如果来自其他租户的用户想要使用该应用程序,则可能需要用户或管理员同意该应用程序。然后,将在该租户中自动创建服务主体。这样该租户中的用户可以使用该应用程序。
您可以在this documentation中查看有关多租户应用的用户或管理员同意的更多详细信息。
解决方案:
尝试在您的请求中添加&prompt=admin_consent
以强制获得管理员同意。您需要使用一个管理员帐户登录并获得管理员同意。如果您是该租户的管理员,则还可以在user can do consent
中启用Enterprise Applications>User settings
。
请告诉我这是否有帮助!