Azure AD-外部api中的自定义验证

时间:2019-02-15 13:55:17

标签: azure azure-active-directory azure-ad-b2c

我有3个应用程序,一个是桌面应用程序,这是我的客户端,第二个是我要保护的Web Api,最后一个是api,它检查具有密码的用户是否存在。

就我而言,我想将此流与Azure AD连接起来。

我认为这应该像这样工作: 1.DesktopApplication向AZURE发送带有clientid,clientsecret,用户名和密码的请求 2.Azure将带有用户名和密码的请求发送到我的api,在那里我可以检查该用户是否存在(如果存在),我将返回“ true”(或类似的东西) 3.如果api返回“ true”,Azure可以返回到DesktopApplication令牌 4. DidsktopApplication将发送带有令牌的安全Web Api请求 5.DesktopApplication从安全的Web Api接收内容

3点的api与5点的api不同。

是否可以使用Azure AD进行此流程?如果不能,我是否可以对流程进行一些操作以保护Azure的Web Api并仍将用户存储在旧的db(oracle)中?

1 个答案:

答案 0 :(得分:1)

最好使用OpenID Connect身份验证流对用户进行身份验证并以这种方式获取令牌。

您建议的方法有一些缺点:

  1. 您正在将客户端机密存储在桌面应用程序中,任何人都可以轻松提取它。
  2. 允许您执行此身份验证的身份验证流程不适用于启用了MFA的用户/联合用户(本地AD / MS帐户/来宾帐户)/密码已过期的用户。
  3. 它可以训练用户被欺骗,因为他们实际上只应在实际登录页面上输入密码即可。

因此最好使用这样的流程:

  1. 您的桌面应用程序使用Azure AD身份验证库(ADAL)或Microsoft身份验证库(MSAL)来验证用户身份,从而请求API的访问令牌
  2. 桌面应用程序调用API,API验证令牌签名,发行者,有效时间等。

它将向用户显示一个可以登录的弹出窗口,其结果是,您将获得一个ID令牌(告诉您的桌面应用程序用户)和该API的访问令牌。