Vit*_*nov 2 oauth-2.0 openid-connect asp.net-core
人们,
您能否为我澄清这两种方法的区别和目的:
根据名称一个是用来授权的,另一个是用来验证用户的,对吧?因此,如果我的 mvc 应用程序需要知道我需要使用谁来.AddOpenIdConnect()获取用户id_token?如果我需要代表当前用户从 mvc 应用程序调用资源服务,我需要添加.AddOAuth()以获得access_token?
auth0.com 的实验表明,代码 with.AddOAuth()能够获得访问令牌作为 的结果HttpContext.GetTokenAsync("access_token"),但如果HttpContext.GetTokenAsync("id_token").
反之亦然 -.AddOpenIdConnect()可以获得 id_token,但不能获得 access_token。
两者的配置是相等的:
.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;
}
};
})
Run Code Online (Sandbox Code Playgroud)
这真的很奇怪,因为我可以在 postman 中使用 code flow 和 scope 获得两个令牌(访问和id)openid email profile。
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() 来获取 access_token?
OIDC 是一种 OAuth 扩展,因此您可以使用任一扩展来获取访问令牌以访问受保护资源。
这真的很奇怪,因为我可以通过代码流和范围 openid 电子邮件配置文件在邮递员中获得两个令牌(访问和 ID)。auth0.com 上的教程还表明,具有附加范围的 .AddOpenIdConnect() 也可以获得访问令牌。非常混淆。
openid email profile是 OIDC 范围。如果使用代码流,您没有提供您的范围,只有 OIDC 的范围,还包括一个不记名访问令牌。这是为了确保令牌响应符合 OAuth 2.0 规范。对于仅请求 ID 令牌的基本 OpenID 身份验证请求,此访问令牌是名义上的,可以安全地忽略。但是,当还请求访问 UserInfo 端点上的用户配置文件数据时,访问令牌就会发挥作用。
但是当您想获取访问受保护资源/API 的访问令牌时,您需要在 IDP(Auth0) 上注册资源并添加 OIDC Scope ,以便 Auth0 可以征求用户的同意来获取访问令牌。
| 归档时间: |
|
| 查看次数: |
1711 次 |
| 最近记录: |