【问题标题】:Handling callback from Identity Server处理来自 Identity Server 的回调
【发布时间】:2020-08-26 12:58:40
【问题描述】:

作为客户端应用程序,用户从身份服务器登录并重定向到客户端应用程序的/signin-oidc 端点。 /signin-oidc 已经由 OpenId 中间件自动处理,所以我不能将我的注册用户进程放在第一次登录时。

在 Google、Facebook 或 Microsoft 的外部登录过程中,在成功登录结束时有一个 returnUrl 重定向,我能够注入我的注册(保存用户详细信息)代码逻辑。

OpenId 似乎在这方面有所不同。那么注册过程的正确方法是什么?

【问题讨论】:

    标签: oauth oauth-2.0 identityserver4 openid asp.net-core-3.1


    【解决方案1】:

    您可以在 OIDC OWIN 中间件中使用通知事件,该中间件调用以启用开发人员添加自定义逻辑。比如可以查询数据库,在OnTokenValidated事件中创建用户:

    options.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = ctx =>
        {
            //query the database 
    
            var db = ctx.HttpContext.RequestServices.GetRequiredService<YourDbContext>();
    
            //perform custom logic for user management in local database
    
    
            return Task.CompletedTask;
        },
    };
    

    【讨论】:

    • 我不想访问服务定位器,所以我更喜欢在控制器内处理它,但我想这是唯一的方法。
    • 如果你想在控制器中这样做,你可以手动设置路径:if (!User.Identity.IsAuthenticated) { return Challenge(new AuthenticationProperties() { RedirectUri = "/home/redirectOnRole" } , AzureADDefaults.AuthenticationScheme); },见stackoverflow.com/a/61452853/5751404。根据您的身份验证方案更改方案名称
    • 或者你可以在索引页面中这样做,因为默认情况下,oidc中间件将在认证后返回索引页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-10-02
    • 2019-05-19
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多