gpt4 book ai didi

c# - 为什么在使用 ASP.NET Identity Core 时 OAuth 会失败?

转载 作者:太空宇宙 更新时间:2023-11-03 22:35:43 25 4
gpt4 key购买 nike

我有一个具有以下配置的 ASP.NET Core 2.x 项目:

services
.AddAuthentication(options => options.DefaultScheme = CookieAuthenticaitonDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddFacebook(ConfigureFacebook);

可以预见,当我从我的一个行为中调用时:

return Challenge(new AuthenticationProperties { RedirectUri = "/test"}, "Facebook");

... 然后,我通过 Facebook OAuth 序列进行导航。当我回到我的应用程序时,HttpContext.User.Identity 填充了相关详细信息:

  • User.Identity.Name - Facebook 用户名。
  • User.Identity.AuthenticationType - 字符串 “Facebook”
  • User.Identity.IsAuthenticated - true

这一切都很好,正如预期的那样。但是,如果我将以下内容添加到我的应用程序配置中

services.AddIdentity<MyUserType, MyRoleType>()
.AddEntityFrameworkStores<MyDbContext>();

突然之间,OAuth 流程以 User.Identity 结束,成为匿名的,没有任何其他更改。如果我们深入 IdentityServiceCollectionExtensions.cs,我们会发现:

options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme; options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme; options.DefaultSignInScheme = IdentityConstants.ExternalScheme;

除其他事项外...

这是怎么回事?为什么 Identity 会干扰 Cookie 进程,从 OAuth 提供程序返回 User 的正确方法是什么?

最佳答案

要结合 OAuth 和 Asp.Net Core Identity,您需要使用 CookieAuthenticationDefaults.AuthenticationScheme 配置 facebookOptions.SignInScheme

尝试下面的代码:

services
.AddAuthentication(options => options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme)
.AddFacebook(facebookOptions =>
{
facebookOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
facebookOptions.AppId = "xx";
facebookOptions.AppSecret = "xxx";
});

关于c# - 为什么在使用 ASP.NET Identity Core 时 OAuth 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55231524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com