如何使用Azure和Django在SPA上验证令牌上的签名?

时间:2018-11-27 22:52:21

标签: django azure authentication azure-active-directory openid

我正在尝试在我们的Web应用程序中使用Microsoft Outlook邮件API。 首先遵循了本教程https://docs.microsoft.com/en-us/outlook/rest/javascript-tutorial,但是其中一些重要的内容被跳过了。


[跳过的部分]

https://docs.microsoft.com/en-us/outlook/rest/javascript-tutorial#using-the-id-token

  

此示例不会进行   OpenID规范。最值得注意的是,它不会验证   令牌。当前从Azure请求签名密钥需要   服务器端组件,因此为了避免,我们将跳过该步骤   简单。但是,生产应用程序不应跳过此重要事项   步骤!

在示例代码中:

  // Per Azure docs (and OpenID spec), we MUST validate
  // the ID token before using it. However, full validation
  // of the signature currently requires a server-side component
  // to fetch the public signing keys from Azure. This sample will
  // skip that part (technically violating the OpenID spec) and do
  // minimal validation

我有一个使用Django创建的服务器端组件,但是我不确定如何从Azure获取公共签名密钥。

我正在实现的实际功能是通过HTML表单发送电子邮件。由于多种原因,我选择在客户端实现此功能。它正在运行,我想在部署之前确保身份验证的安全性。

请澄清一下,我遵循了上面的教程,并使用此repo中的代码来访问Outlook API,而不是使用Microsoft图形。回购在本教程的开头介绍。

谢谢。

1 个答案:

答案 0 :(得分:0)

您必须通过检查Azure的AlphanumComparator comparator = new AlphanumComparator ( CaseHandling.CASE_INSENSITIVE ); Arrays.sort( albumArray, ( Album a, Album b ) -> { return comparator.compare( a.getAlbumArtist(), b.getAlbumArtist() ); }); 配置(例如this)在Azure中找到jwkscert终结点。您将能够以well-known格式在jwks端点中找到所有活动键和已启用键。您可以在应用程序内部解析这些值,然后选择所需的密钥。