IdentityServer4 client_id特定登录页面

Car*_*ion 2 authentication asp.net-core identityserver4

我正在尝试根据 client_id 创建不同的登录页面。

用例:我的默认登录页面是经典的用户名/密码类型登录,但对于特定的 client_id,登录页面要求提供 3 个不同的信息,这些信息可以在他在邮件中收到的一张纸上找到(由第三方发送) )。一旦我有了这 3 个信息,我就可以验证并找到关联的用户。

技术:到目前为止,我已经做到了,一旦 IdentityServer4 将 /connect/authorize 重定向到它的默认登录路由 (/account/login),我就会根据 client_id 重定向到我的第二个登录。它可以工作,但一点也不优雅(感觉很hackish)。我确信有更好的方法来实现这一点,可能通过中间件直接从连接/授权重定向到我的第二个登录页面?

有什么想法/提示吗?

m3n*_*ak3 6

在第一次Login调用 IdentityServer 时,您调用:

/// <summary>
    /// Show login page
    /// </summary>
    [HttpGet]
    public async Task<IActionResult> Login(string returnUrl)
    {
        // build a model so we know what to show on the login page
        var vm = await accountService.BuildLoginViewModelAsync(returnUrl);

        // some more code here

        return View(vm);
    }
Run Code Online (Sandbox Code Playgroud)

在被称为的情况下accountService.BuildLoginViewModelAsync,您拥有var context = await interaction.GetAuthorizationContextAsync(returnUrl);并且在这种情况下您拥有clientId。您可以扩展该类LoginViewModel以包含一些(您自己的)自定义属性,并在 AccountController 中基于此属性返回不同的视图。然后您只需在Views文件夹中创建您的特定视图即可。

通过这种方式,您可以拥有任意数量的视图。