方案: 我在Azure中托管了一项服务。该服务托管一个问题数据库。我希望我的Android应用程序通过Web应用程序身份验证而不是委派身份验证从服务获取数据。基本上我不希望用户登录。
研究: 我搜索了很多,并且adal,没有任何getstoken的变种需要客户秘密使其工作。在.Net上,使用ClientCredentials可以完成同样的事情。关于SO的最接近的问题是Authenticate the user on Azure AD using ADAL library from Android native app。
答案并没有具体说明如何实现它。
答案 0 :(得分:1)
移动电话或其他Android设备上的应用程序为public client applications(本机客户端应用程序)。作为noted in the specification,公共客户端不允许使用客户端身份验证方法。
通俗地说,由于公共客户无法保密客户端,由于代码生存和运行的性质,它也无法真正向AAD验证其客户身份。例如,一个邪恶的人可能会嗅到运行您的应用程序的本机客户端设备的Web流量,并使用他们自己的代码复制它,模仿您的应用程序。因此,只能使用更严格的身份验证方法,如委托身份验证。
如果您需要为两个服务之间的服务呼叫(仅限应用程序呼叫)提供服务,则它们必须都是机密客户端。从技术上讲,你可以让你的Android应用程序通过注册Web App ID和Client Secret来表现得好像它是一个机密客户端,但我们的库不会帮助你做到这一点。您需要回到根目录并自己进行HTTP调用以获取令牌。