在我的应用程序中,我通过ADAL的acquireTokenSilent()为一个资源获取访问令牌,该资源成功,然后我尝试获取另一个资源的访问令牌并且它说没有找到,因此我必须调用API以显式提示输入凭据。这是一个问题,因为用户必须使用相同的凭据登录两次才能访问两个不同的资源。
我对每个资源使用相同的权限。以下是显示第二个资源的缓存中没有命中的消息。
May 4 13:22:37 iPad MyApp [290]:ADAL 2.4.1 iOS 10.2.1 [2017-05-04 20:22:37 - XXXX]信息:找不到查询的项目:(resource { {3}} +客户端+权限https://MYRESOURCE)
所以我的问题是,在什么情况下会在资源之间共享令牌,是否有任何特殊的限制(使用API的方式)允许这样做?
答案 0 :(得分:1)
如果要构建两个本机客户端(公共客户端)并且要在两者之间启用单点登录,则一个选项是在应用程序之间共享App ID,而不是将实际令牌从一个服务传递到另一个服务。 / p>
例如,假设您的公司名称是Contoso。您有一个日历移动应用程序和一个文档编辑器应用程序。
您可以使用以下命令创建单个Native Client应用程序:
然后,当用户登录任一应用程序时,他们将看到具有通用名称“Contoso Apps”的登录屏幕,并提示同时同意这两个应用程序的权限。现在这可能是一种糟糕的体验,因为这两者的权限可能会超过所需的个人权限,但将来可以通过Incremental Consent修复。
然后假设您正在使用我们的身份验证库来自动缓存访问令牌,当用户打开第二个应用程序时,他们将不会被提示同意,因为您已经为该应用程序ID缓存了令牌。
这显然不是最好的解决方案,而是过去用于大型企业应用程序的解决方案。