Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IdentityServer4-API服务器如何与Identity Server通信_Identityserver4_Openid - Fatal编程技术网

IdentityServer4-API服务器如何与Identity Server通信

IdentityServer4-API服务器如何与Identity Server通信,identityserver4,openid,Identityserver4,Openid,我们目前正在通过IdentityServer4 github项目开发API和IdentityServer: Github存储库: 文件: 我们正在考虑API服务器或服务提供商(SP)与身份服务器或身份提供商(IdP)通信的最有效和安全的方式。我们还没有找到很多信息 该图向我们展示了: 服务提供商(SP)向身份提供商(IdP)请求用户信息(步骤5:用户信息检索) (来源:) SP如何向IdP询问这些信息?例如,他是否发送包含用户发送的访问令牌的HTTP Post“令牌信息” 如果是,IdP如何理

我们目前正在通过IdentityServer4 github项目开发API和IdentityServer:

Github存储库:

文件:

我们正在考虑API服务器或服务提供商(SP)与身份服务器或身份提供商(IdP)通信的最有效和安全的方式。我们还没有找到很多信息

该图向我们展示了:

服务提供商(SP)向身份提供商(IdP)请求用户信息(步骤5:用户信息检索)

(来源:)

  • SP如何向IdP询问这些信息?例如,他是否发送包含用户发送的访问令牌的HTTP Post“令牌信息”
  • 如果是,IdP如何理解此请求来自SP
  • 我们认为我们可以:

    • 在IdP和SP之间使用特定的SSL证书,并以某种方式对其进行验证
    • RSA还使用IdP已知的证书对访问令牌的哈希进行签名
    我们还考虑到:

    • 将SP本身注册为IdP的特定客户端和特定索赔
    • 此声明仅提供给SP,并允许SP发送请求以询问有关访问令牌的用户信息
  • 此外,SP是否能够以有限的时间(等于访问令牌的持续时间)存储用户关于给定和先前发送给IdP的访问令牌的信息(在访问令牌/用户信息字典中)?如果资源在访问令牌的有效期内被消耗了一定的时间,这将防止服务提供者不断地从访问令牌请求用户信息

  • 我们也可以提供代码,但我们认为这个问题主要是一个架构问题。

    该图显示了用户如何验证和获取访问令牌。SP在idP中注册(使用clientID/secret)。SP通过向浏览器发送重定向请求用户(浏览器)进行身份验证

    SP稍后在获取身份验证代码时,会在后台发出单独的请求,以获取真正的访问/id令牌

    执行此交换的一些简化代码如下所示:

    /// <summary>
    /// This method is called with the authorization code and state parameter
    /// </summary>
    /// <param name="code">authorization code generated by the authorization server. This code is relatively short-lived, typically lasting between 1 to 10 minutes depending on the OAuth service.</param>
    /// <param name="state"></param>
    /// <returns></returns>
    [HttpPost]
    public IActionResult Callback(string code, string state)
    {
    
        //To be secure then the state parameter should be compared to the state sent in the previous step
    
        var url = new Url(_openIdSettings.token_endpoint);
    
        var token = url.PostUrlEncodedAsync(new
        {
            client_id = "authcodeflowclient",       //Id of this client
            client_secret = "mysecret",
            grant_type = "authorization_code",
            code_verifier = code_verifier,
            code = code,
            redirect_uri = "https://localhost:5001/CodeFlow/callback"
    
        }).ReceiveJson<Token>().Result;
    
        return View(token);
    }
    
    //
    ///使用授权代码和状态参数调用此方法
    /// 
    ///授权服务器生成的授权代码。此代码相对较短,通常持续1到10分钟,具体取决于OAuth服务。
    /// 
    /// 
    [HttpPost]
    公共IActionResult回调(字符串代码、字符串状态)
    {
    //为了安全起见,应将状态参数与上一步中发送的状态进行比较
    var url=新url(_openIdSettings.token_endpoint);
    var token=url.PostUrlEncodedAsync(新
    {
    client_id=“authcodeflowclient”,//此客户端的id
    客户_secret=“mysecret”,
    授予\ u type=“授权\ u代码”,
    代码校验器=代码校验器,
    代码=代码,
    重定向_uri=”https://localhost:5001/CodeFlow/callback"
    }).ReceiveJson().Result;
    返回视图(令牌);
    }
    
    对于接收到的令牌,由客户端决定存储它们的位置。在ASP.NET中,ID令牌用于创建用户会话cookie,然后丢弃ID令牌。访问令牌也可以存储在此cookie中,也可以存储在内存或其他地方。但这一切都取决于你的需要

    SP获得访问令牌后,可以将该令牌传递给API。但是,在API可以验证令牌的签名之前,它首先向IdP请求其公共签名密钥(GET请求),然后API使用它来验证令牌签名


    有关令牌签名和密钥的详细信息,请参见此部分。

    您的问题涉及很多。所以,也许最好问一些更细致的问题,但我希望我的答案是一个起点:-)非常感谢你的回答。我的问题是关于“获取真实访问权/id令牌的单独请求”的。我们假设这种请求是SP向IdP隐式发出的,但我们对此不太确定。如果是这样,SP是否以某种方式将信息存储在内存中?再次感谢您的帮助,我们将继续学习!