Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
Asp.net core .AddOAuth()与.AddOpenIdConnect()的比较_Asp.net Core_Oauth 2.0_Openid Connect - Fatal编程技术网

Asp.net core .AddOAuth()与.AddOpenIdConnect()的比较

Asp.net core .AddOAuth()与.AddOpenIdConnect()的比较,asp.net-core,oauth-2.0,openid-connect,Asp.net Core,Oauth 2.0,Openid Connect,人, 你能为我澄清一下这两种方法的区别和目的吗 Microsoft.Extensions.DependencyInjection.OAuthExtensions.AddOAuth() Microsoft.Extensions.DependencyInjection.OpenIdConnectExtensions.AddOpenIdConnect() 根据名称,一个用于授权,另一个用于验证用户,对吗? 因此,如果我的mvc应用程序需要知道谁是用户,我需要使用.AddOpenIdConnect()获

人,

你能为我澄清一下这两种方法的区别和目的吗

  • Microsoft.Extensions.DependencyInjection.OAuthExtensions.AddOAuth()
  • Microsoft.Extensions.DependencyInjection.OpenIdConnectExtensions.AddOpenIdConnect()
  • 根据名称,一个用于授权,另一个用于验证用户,对吗? 因此,如果我的mvc应用程序需要知道谁是用户,我需要使用
    .AddOpenIdConnect()
    获取
    id\u令牌
    ?如果我需要代表当前用户从mvc应用程序调用资源服务,我需要添加
    .AddOAuth()
    以获取
    访问\u令牌

    使用auth0.com进行的实验表明,使用
    .AddOAuth()
    的代码能够获得访问令牌,这是
    HttpContext.GetTokenAsync(“访问令牌”)
    的结果,但如果
    HttpContext.GetTokenAsync(“id\U令牌”)
    则没有

    visa versa-
    .AddOpenIdConnect()
    可以获取id\u令牌,但不能访问\u令牌

    两者的配置相同:

    .AddOAuth("oauth", o =>
                {
                    o.AuthorizationEndpoint = "https://<Realm>.auth0.com/authorize?audience=resourceAPI-server";
                    o.TokenEndpoint = "https://<REALM>.auth0.com/oauth/token";
                    o.ClientId = "<clientID>";
                    o.ClientSecret = "<secret>";
                    o.CallbackPath = "/cb_oauth";
                    o.SaveTokens = true;
    
                })
                .AddOpenIdConnect("openIdConnect", o =>
                {
                    o.Authority = "https://<REALM>.auth0.com";
                    o.ClientId = "<clientID>";
                    o.ClientSecret = "<secret>";
                    o.CallbackPath = "/cb_openIdConnect";
                    o.SaveTokens = true;
                    o.Events =new OpenIdConnectEvents()
                    {
                        OnRedirectToIdentityProvider = rc =>
                        {
                            rc.ProtocolMessage.SetParameter("audience","resourceAPI-server");
                            return Task.CompletedTask;
                        }
                    };
                })
    
    添加oauth(“oauth”,o=> { o、 授权端点=”https://.auth0.com/authorize?audience=resourceAPI-服务器”; o、 标记端点=”https://.auth0.com/oauth/token"; o、 ClientId=“”; o、 ClientSecret=“”; o、 CallbackPath=“/cb_oauth”; o、 SaveTokens=true; }) .AddOpenIdConnect(“openIdConnect”,o=> { o、 权威=”https://.auth0.com"; o、 ClientId=“”; o、 ClientSecret=“”; o、 CallbackPath=“/cb_openIdConnect”; o、 SaveTokens=true; o、 事件=新的OpenIdConnectEvents() { OnRedirectToIdentityProvider=rc=> { rc.ProtocolMessage.SetParameter(“受众”、“资源API服务器”); 返回Task.CompletedTask; } }; }) 这真的很奇怪,因为我可以通过代码流和作用域
    openid电子邮件配置文件
    在postman中获得这两个令牌(访问和id)

    auth0.com上的教程还显示,具有附加作用域的.AddOpenIdConnect()也可以获取访问令牌。 非常混乱


    那么,哪一个用于哪种情况?

    OAuth 2.0框架描述了授予授权的总体模式,但没有定义如何实际执行身份验证

    OpenID Connect
    OIDC
    是一个OAuth扩展,它添加并严格定义了用于返回用户信息的ID令牌-是OAuth 2.0的一个概要文件,它定义了身份验证的工作流

    因此,如果我的mvc应用程序需要知道谁是用户,我需要使用.AddOAuth()

    建议使用OIDC,OpenID connect将为您提供一个访问令牌和一个id令牌。id令牌是一个JWT,包含有关经过身份验证的用户的信息。您的客户端应用程序将在
    AddOpenIdConnect
    扩展的帮助下验证令牌,解码令牌以获取用户的配置文件信息

    但是您仍然可以使用
    AddOAuth
    ,区别在于OAuth需要您从IDP获取访问令牌,以访问身份提供者的用户管理端点,该端点返回用户的配置文件信息

    如果我需要代表当前用户从mvc应用程序调用资源服务,我需要添加AddOpenIdConnect()以获取访问令牌

    OIDC是OAuth扩展,所以您可以使用其中任何一个来获取访问受保护资源的访问令牌

    这真的很奇怪,因为我可以在postman中通过代码流和scope openid电子邮件配置文件获得这两个令牌(访问和id)。 auth0.com上的教程还显示,具有附加作用域的.AddOpenIdConnect()也可以获取访问令牌。非常混乱

    openid电子邮件配置文件
    是OIDC范围。如果使用代码流,则不提供作用域,只提供OIDC的作用域,还包括承载访问令牌。这是为了确保令牌响应符合OAuth 2.0规范。对于仅请求ID令牌的基本OpenID身份验证请求,此访问令牌是标称的,可以安全地忽略。但是,当在UserInfo端点请求访问用户配置文件数据时,访问令牌将发挥作用


    但是,当您想要获取访问受保护资源/API的访问令牌时,您需要在IDP(Auth0)上注册资源并添加OIDC作用域,以便Auth0可以请求用户同意获取访问令牌。

    您好,非常感谢您的回答。当我说“我的mvc应用程序需要知道我需要使用的用户是谁。AddOAuth()”时,我可能不正确。。应该是。AddOpenIdConnect。更正。但仍然不清楚。您说通过使用.AddOpenIdConnect()访问承载令牌作为额外信息提供?这是否意味着.AddOpenIdConnect()使用起来“更好”,因为它将同时提供令牌、id\u令牌和access\u令牌?那么,当用户应该被认证和授权调用api时,应该使用什么方法呢?
    你说通过使用.AddOpenIdConnect()访问承载令牌作为额外信息提供?
    它提供包含用户信息的ID令牌。
    这是否意味着.AddOpenIdConnect()更好要使用,因为它将同时提供令牌、id_令牌和access_令牌
    ,如果您的应用程序希望在身份验证期间更方便地获取用户信息,并希望在令牌过期时刷新access令牌,则可以使用OIDC。另见:好的。酷。本文深入讨论了Oauth/Oidc的差异。困扰我的是.AddOpenIdConnect()HttpContext.GetTokenAsync(“访问令牌”)不返回令牌,只返回id\u令牌。然后,为了获得访问权,应使用\u token.AddOauth()。。除非我以错误的方式使用它。@VitaliyMarkitanov,这通常是因为使用了错误的流,请尝试设置
    ResponseType
    t