【问题标题】:Check OpenID Connect user against local web application users with OWIN使用 OWIN 对照本地 Web 应用程序用户检查 OpenID Connect 用户
【发布时间】:2021-03-07 14:13:28
【问题描述】:

我需要将 OpenID Connect 身份验证添加到现有的 ASP.NET MVC Web 应用程序。为此,我正在使用 OWIN。

一旦用户通过身份验证服务器(在我的情况下为 Azure Active Directory)成功进行身份验证,我需要检查用户是否可以映射到我的 Web 应用程序中的本地帐户。如果用户没有有效的本地帐户,实际登录过程应该会失败。有标准的方法吗?

在我找到的示例 (https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-asp-webapp) 中,似乎只要用户成功通过 Azure 身份验证,它就会登录到应用程序中。我们可以在 OWIN-OIDC 登录过程中添加自定义代码来执行额外的检查吗?

感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc owin openid-connect


    【解决方案1】:

    好问题,这里有 2 个级别,正如您所发现的那样:

    • 使用授权服务器/身份提供者进行身份验证
    • 访问被允许的应用程序

    如果第一个成功但第二个不成功,则标准行为是将用户重定向到“拒绝访问”页面(此页面必须允许匿名访问,以避免重定向循环)。登录未失败,但用户无权访问应用。

    OWIN 使用 response_type='code id_token' 意味着您将拥有一个 Open Id Connect 用户身份可以使用。如果您在自己的数据中找不到用户,您可以在以下回调中执行重定向:

    var openidOptions = new OpenIdConnectAuthenticationOptions
    {
        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            // Point to a callback to check the identity against my own system
            // This callback can perform a redirect if the app does not recognise the user
            AuthorizationCodeReceived = HandleAuthorizationCodeReceived
        }
    }
    

    【讨论】:

    • 非常感谢您的回复!是否有充分的理由使用 openidOptions.Notifications.AuthorizationCodeReceived 而不是 openidOptions.CallbackPath?
    • 一旦登录重定向返回到您的应用程序,您需要编写一些逻辑来查看用户是否存在于您的系统中。 AuthorizationCodeReceived 是一个函数,一旦您拥有用户身份(基于 id 令牌),您就可以在其中插入逻辑。 CallbackPath 只是一个值,因此您不能在那里编写逻辑代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2019-04-14
    • 2019-10-13
    • 2019-02-19
    • 2015-03-26
    • 2014-06-26
    • 2021-11-03
    相关资源
    最近更新 更多