人,
您能为我说明这两种方法的区别和目的是什么:
根据名称,一个用于授权,另一个用于验证用户,对吗?因此,如果我的mvc应用程序需要知道谁是谁,我需要使用.AddOpenIdConnect()
来获取id_token
吗?如果我需要代表当前用户从mvc应用程序调用资源服务,则需要添加.AddOAuth()
以获得access_token
?
使用auth0.com进行的实验表明,使用.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;
}
};
})
这真的很奇怪,因为我可以在邮递员中同时获得带有代码流和作用域openid email profile
的令牌(访问和ID)。>>
auth0.com上的教程还显示具有附加作用域的.AddOpenIdConnect()也可以获取访问令牌。非常令人困惑。
那么,哪种情况适合?
人们,能否为我澄清这两种方法的区别和目的:Microsoft.Extensions.DependencyInjection.OAuthExtensions.AddOAuth(); Microsoft.Extensions.DependencyInjection ....
OAuth 2.0
框架描述了用于授予授权的总体模式,但未定义如何实际执行身份验证。