【发布时间】:2020-05-14 10:36:30
【问题描述】:
人,
您能否为我澄清一下这两种方法的区别和目的:
- Microsoft.Extensions.DependencyInjection.OAuthExtensions.AddOAuth();
- Microsoft.Extensions.DependencyInjection.OpenIdConnectExtensions.AddOpenIdConnect()。
顾名思义,一个用于授权,另一个用于验证用户,对吧?
因此,如果我的 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() 也可以获得访问令牌。 非常混乱。
那么,哪一个适合什么情况?
【问题讨论】:
标签: asp.net-core oauth-2.0 openid-connect