如何使用 Azure AD 向 Web 服务验证移动应用程序?

时间:2021-03-30 16:10:30

标签: asp.net-mvc azure security azure-active-directory microsoft-identity-platform

目前我有这个设置:

enter image description here

在登录时以及在登录后的每个后续请求中,我构建的移动应用程序使用基本身份验证通过 Web 服务对用户进行身份验证,该 Web 服务为应用程序提供其请求的信息。

在每个请求中,都会检查 Authorization 标头,从标头中提取密码和用户名,使用专有 DLL 对密码进行散列(因此 Web 服务实际上不包含散列算法)并与散列密码进行比较与存储在数据库中的用户名相关联。

我现在被要求在登录选项中包含 Azure AD SSO。 在阅读了很多关于该主题的内容后,在我看来这就像设置:

enter image description here

我对一些事情很好奇:

  1. 这个设置是否正确,或多或少?
  2. 应用是否将身份令牌发送到网络服务?如果是,网络服务如何验证该令牌?
  3. Web 服务可以使用安全令牌中的一项声明将 Azure 标识与 DB 用户匹配是否正确?
  4. 访问令牌在这张图片中的位置是什么?

感谢您的帮助!

(旁注:我知道在第一种情况下基本身份验证不是首选方式。这是一个临时决定,直到我们开发了令牌处理代码,它只能使用 HTTPS 并且这是一个内部应用程序 - 您除非您有我们给您的代码,否则将无法激活该应用)

1 个答案:

答案 0 :(得分:1)

我在 Azure 广告方面的经验很少,但我想我们可以谈谈您的情况。

首先,无论 id 令牌和访问令牌都是 jwt 令牌,因此对于您的 Web 服务应用程序,您需要使用 jwt decode library 来解密令牌并获取其包含的声明。这里我们需要知道id token和access token的区别,我想你也会知道,对于你的web service应用,如果更可能扮演api应用的角色,你需要使用access token因为这个令牌也包含用户信息。然后你需要在你的程序中添加代码来解码令牌并检查它是否是请求的“有效”令牌。(因为你已经使用了azure ad来实现登录部分,所以你不需要使用你的自定义登录部分。)

接下来,azure ad提供的登录功能需要使用azure ad所属租户的账号和密码,用户账号可能类似于xx@xx.onmicrosoft.com,不需要保留sycn使用数据库中的帐户,因此您很难且无需将从解码的令牌中获得的用户名与数据库中的用户名进行比较。因为当您的 Web 服务收到令牌(id 或访问令牌)时,这意味着有人已经通过了 azure ad 的身份验证。令牌包含用户信息,包括角色、过期时间等。您需要检查令牌是否已过期以及是否具有正确的范围。 (我们来看一个常见的情况,微软提供了很多graph apis来调用,访问这些api时,我们需要在request head中提供具有匹配范围的access token,例如https://graph.microsoft.com/v1.0/me 需要 User.Read 的委托 api 权限)

在这里总结一下,如果您的 Web 服务只需要数据库中的用户登录就可以访问,id 令牌和访问令牌都适合您,因为它们都包含用户名,如 'xx@xx.onmicrosoft .com',您需要做的是解码令牌并检查令牌是否已过期以及该用户是否存在于您的数据库中(您可以设置它们之间的映射)。

相关问题