C# 使用Azure AD在ASP.NET web应用程序中进行身份验证

C# 使用Azure AD在ASP.NET web应用程序中进行身份验证,c#,asp.net,asp.net-mvc,azure,authentication,C#,Asp.net,Asp.net Mvc,Azure,Authentication,我正在考虑使用Azure广告来处理我的Web应用程序的用户帐户 我实现了一些类似于Microsoft的示例代码(链接自) 它使用以下身份验证场景: 据我所知,一旦用户通过身份验证,OWIN就会为特定域创建并设置自己的会话cookie。只要此cookie未过期或损坏,用户将保持登录状态。我们的应用程序只有在用户注销或再次登录时才会与身份验证提供商对话 因此,这就提出了一个问题:当用户在登录时从广告中停用或删除时会发生什么 假设我的web应用程序中存储了一些敏感信息 只能由授权用户修改的数据库。权

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

我实现了一些类似于Microsoft的示例代码(链接自)

它使用以下身份验证场景:

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

因此,这就提出了一个问题:当用户在登录时从广告中停用或删除时会发生什么

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

Bob是我们公司Web应用程序的管理员。原因 没有透露,我们不得不终止他的雇佣关系。我们的领域 管理员将其广告帐户锁定,Bob被护送出网站 营业场所一切都会好起来的

一切都不好

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

Bob仍然经过身份验证(Bob的凭据仍然标识Bob),但他不应再被授权访问服务。但是,会话cookie仍然有效。Bob仍在登录,在该cookie过期或会话结束之前,他仍可以访问web应用程序

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

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

  • 为每个[授权]操作调用Azure的graph API,该操作返回用户是否有效且未被锁定

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

  • 如何使用BearAuthentication。(非常感谢您的帮助,我能找到的唯一示例是web api)

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

  • 只要此cookie未过期或损坏,用户将保持登录状态

    不是真的

    OAuth2和WS-Fed令牌都包含令牌过期日期和其他属性


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

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


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

    啊,是的,非常正确!但是问题仍然存在。是的,在短时间内,用户可能已经在提供商端处于非活动状态,但在您的应用程序中处于活动状态。如果你真的需要立即终止雇佣关系,2。从你的清单上看,这似乎是一种可行的方法。我不喜欢2。然后我们必须禁用广告帐户,然后进入我们的web应用程序并在那里禁用帐户。听起来这是您自己的策略/要求,可以禁用帐户并同时终止会话。将此作为一项要求,您没有太多选择。有趣的是,这确实减少了外部请求的数量。谢谢你,我得看看这件事。你对我应该查什么有什么建议吗?