【问题标题】:Authentication in an ASP.NET web application using Azure AD使用 Azure AD 在 ASP.NET Web 应用程序中进行身份验证
【发布时间】:2017-01-17 13:12:39
【问题描述】:

我正在考虑使用 Azure AD 来处理我的 Web 应用程序的用户帐户。

我已经实现了类似于 Microsoft 的示例代码 here(链接自 here)。

它使用以下身份验证场景(this)

据我了解,一旦用户通过身份验证,OWIN 就会为特定域创建并设置自己的会话 cookie。只要此 cookie 没有过期或损坏,用户将保持登录状态。我们的应用只会在用户注销或再次登录时与身份验证提供程序对话。

所以这就提出了一个问题:如果用户在仍然登录的情况下从 AD 中被停用或删除,会发生什么情况?

假设我有一些敏感信息存储在我的网络应用程序的 只能由授权用户修改的数据库。权限 授权保存在本地数据库中,该数据库与 用户的 OID。

Bob 是我们公司 Web 应用程序的管理员。由于原因 未透露,我们不得不终止他的工作。我们的域名 管理员锁定了他的 AD 帐户,并且 Bob 被护送出 前提。一切都应该没问题。

一切都不好。

心怀不满的 Bob 回到家,看着他的笔记本电脑,他的浏览器是 在我们的网络应用程序上打开。他想:“肯定是锁上了 出去?”。他浏览到网站的管理部分,看到他 仍然可以访问它。以一种微不足道的方式让他自己回到 公司,他进去修改了一些敏感信息。

Bob 仍然经过身份验证(Bob 的凭据仍然可以识别 Bob),但他不应再授权访问该服务。但是,会话 cookie仍然有效。 Bob 仍处于登录状态,并且在此 cookie 过期或结束会话之前仍然可以访问网络应用程序。

我怎样才能阻止这种情况发生? (除了不和鲍勃的妻子睡觉。)

我想到的几个“解决方案”:

  1. 为每个 [Authorize] 操作调用 Azure 的图形 API,返回用户是否有效且未被锁定。 Then make the user end their own session

  2. 为检查用户是否被禁用的每个 [Authorize] 操作调用应用程序上的用户元数据表。 (不理想:AD 和本地 DB 之间的差异)

  3. 以某种方式使用 BearerAuthentication。 (非常感谢您的帮助,我能找到的唯一示例是 web-api)

  4. 什么都不做,处理这种不太可能的情况(不理想)

【问题讨论】:

    标签: c# asp.net asp.net-mvc azure authentication


    【解决方案1】:

    您可以使 cookie 中的令牌信息快速过期,例如每半小时一次。在幕后,您可以使用刷新令牌来获取新凭据,因此不会给用户带来不便。您可以在 httpfilter 中执行此操作。如果用户已从 AD 中删除,则刷新操作将失败。这减少了你的脆弱之窗。我想你甚至可以将那个窗口关闭到几分钟。

    您还可以在敏感操作之前强制刷新令牌。

    【讨论】:

    • 有趣,这肯定会减少外部请求的数量。我得看看这个,谢谢。您对我应该查找的内容有任何指示吗?
    【解决方案2】:

    只要此 cookie 没有过期或损坏,用户将保持登录状态。

    不正确。

    OAuth2 和 WS-Fed 令牌都包含令牌到期日期以及其他属性。

    因此,在现实中,Bob 将能够使用该应用程序,直到令牌中的到期日期过去为止。通常令牌提供者发行的令牌最多有效期为几个小时。

    【讨论】:

    • 啊,是的,完全正确!然而问题依然存在。
    • 是的,有一个很短的时间跨度,用户可能在提供商方面已经处于非活动状态,但在您的应用程序中处于活动状态。如果您确实需要立即终止,那么您列表中的 2. 听起来是一种可能的方法。
    • 我不喜欢 2. 然后我们必须禁用 AD 帐户,然后进入我们的 Web 应用程序并在那里禁用该帐户。
    • 听起来这是您自己的政策/要求,以便能够一起禁用帐户并终止会话。将此作为要求,您别无选择。
    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多