我们在AWS上运行移动应用程序后端。后台使用Java spring前端构建,支持原生iOS,原生Android和基于angular js的网站,它有自己的身份验证,使用电子邮件id和密码。现在我们计划将我们的应用程序身份验证与Azure AD中可用的组织活动目录集成。
我们概述了Azure门户应用程序的创建,使用ADAL库从Azure获取令牌。但是我们不清楚如何在web服务端验证令牌。您能给我们介绍一下集成流程吗
不幸的是,Azure AD目前没有很好的指导如何保护Java中的web API。然而,在这种情况下,采用开源方法并不是非常困难。
Azure AD的访问令牌是jwt,本质上只是带有签名的base64编码JSON字符串。jwt。io编译了一个很好的开源库列表,可以用来验证jwt(顺便说一下,有些库也可以生成jwt)。目前最好的参考资料是:
- 在这篇标记参考文章中必要时列出的声明(只忽略关于id_tokens的注释,这是不正确的)。
- OpenID Connect规范在如何验证令牌方面也有一些很好的花语。您还应该确保验证
scope
索赔,这里没有提到。 这个代码示例展示了如何采用这种方法,但它是在。net中。您可以在Java中遵循它的模式。
最难的部分将是稳健地获取、缓存和刷新Azure AD公共签名密钥,确保你的应用程序可以处理密钥轮转。例如,微软的。net开源库每24小时刷新一次密钥,一旦签名验证失败就立即刷新。大多数JWT库不会为您这样做。签名密钥可通过Azure AD的OpenID Connect元数据端点获得,
https://login.microsoftonline.com/<tenant-or-common>/.well-known/openid-configuration
OpenID Connect规范也有关于可用数据格式的信息。