【问题标题】:Azure AD - custom validation in external apiAzure AD - 外部 api 中的自定义验证
【发布时间】:2019-02-15 22:17:19
【问题描述】:

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

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

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

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

是否可以使用 Azure AD 执行此流程?如果不能,我可以对我的流程做些什么来保护 Azure 的 Web Api 并且仍然将用户存储在我的旧数据库(oracle)中吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    所以最好使用这样的流程:

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

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

    【讨论】:

    • 完全同意 juunas 在这里描述的方法。只需添加一个链接,例如来自 Azure-Samples 的链接,带有 Windows 桌面应用程序和使用 ADAL 进行此流程的 API。github.com/Azure-Samples/active-directory-dotnet-native-desktop ..codebase 有点旧(.NET 4.5),但概念还是一样的。
    • 谢谢您的回复,我知道在您的场景中我必须将用户存储在 Azure 中?这个带有登录页面的弹出窗口来自天蓝色?就我而言,我需要将旧系统与新登录过程结合起来。但是,如果我有旧的和大的用户数据库并且在授权过程中我需要检查几个步骤,比如用户没有被阻止或他的登录失败计数,我该怎么办?此信息存储在此数据库中。
    • 您可以将处理程序添加到运行这些检查的 API。如果您实现 JWT 身份验证,则有一个事件可以附加到并拒绝颁发给锁定用户等的令牌
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2023-04-10
    • 2018-05-19
    • 2022-10-22
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多