IdentityServer4快速入门登录问题

问题描述 投票:0回答:1

我试图理解IdentityServer4快速入门中的这个条件。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginInputModel model, string button)
    {
        if (button != "login")
        {
            var context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);
            if (context != null)
            {
                await _interaction.GrantConsentAsync(context, ConsentResponse.Denied);
                return Redirect(model.ReturnUrl);
            }
            else
            {
                return Redirect("~/");
            }
        }

据我所知,如果登录表单没有通过按下登录按钮提交(<button type=submit value=login>)但按另一个帖子的要求(?),到底会发生什么?

什么是 GetAuthorizationContextAsync 在做什么?我想它可能会从Query字符串中提取一些授权代码并授权。正确吗?

谢谢!我想了解一下IdentityServer4快速启动中的这个条件。

c# identityserver4
1个回答
1
投票

QuickStart的例子还包含了代码中的注释,以解释该方法正在做什么。

if (button != "login")
{
    // the user clicked the "cancel" button
    var context = await _interaction.GetAuthorizationContextAsync(model.ReturnUrl);
    if (context != null)
    {
        // if the user cancels, send a result back into IdentityServer as if they 
        // denied the consent (even if this client does not require consent).
        // this will send back an access denied OIDC error response to the client.
        await _interaction.GrantConsentAsync(context, ConsentResponse.Denied);

        // we can trust model.ReturnUrl since GetAuthorizationContextAsync returned non-null
        return Redirect(model.ReturnUrl);
    }
    else
    {
        // since we don't have a valid context, then we just go back to the home page
        return Redirect("~/");
    }
} 

授权上下文 叙述于 文件:

IdentityServer将传递一个returnUrl参数(可在用户交互选项中配置)到同意页面,其中包含授权请求的参数。这些参数为同意页提供了上下文,并且可以在交互服务的帮助下被读取。GetAuthorizationContextAsync API将返回一个AuthorizationRequest的实例。


0
投票

这个带有命名按钮值的技巧是一个 惯用伎俩 有多个按钮来提交同一个表单。无论是点击取消还是登录按钮,都会触发登录表单的提交,但是提交的处理方式会有所不同。

对于您的第二个问题:这与IdentityServer配置中配置的客户端有关。根据返回的URL,正确的客户端是 检索 从IdentityServer配置中获取。在得到这个上下文的同时,还有 验证 触发,以查看返回的URL是否是已知的配置返回URL。

这将被用于确定正确的ClientId,以及配置的客户端是否需要PKCE验证,以正确处理登录请求(要么取消,要么不)。

© www.soinside.com 2019 - 2024. All rights reserved.