【问题标题】:How can I connect with an external authentication server with ASP.NET Core in C#如何在 C# 中使用 ASP.NET Core 连接外部身份验证服务器
【发布时间】:2020-09-01 12:56:32
【问题描述】:

我正在尝试使用 Google API 对 ASP.NET Core 进行身份验证,以便能够访问人员 api。

我有以下代码:

 services.AddAuthentication()
           .AddOpenIdConnect(GoogleDefaults.AuthenticationScheme,
               GoogleDefaults.DisplayName,
               options =>
               {
                   options.Authority = "https://accounts.google.com/o/oauth2/v2/auth";
                   options.ClientId = Configuration["Authentication:Google:ClientId"];
                   options.ClientSecret = Configuration["Authentication: Google:ClientSecret"];
                   options.ResponseType = OpenIdConnectResponseType.Code;
                   options.Scope.Add("openid");
                   options.Scope.Add("email");
                   options.CallbackPath = "/signin-google";
               });

问题是我得到以下异常

处理请求时发生未处理的异常。
IOException:IDX20807:无法从以下位置检索文档:'[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]'。 HttpResponseMessage: '[PII 被隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII.]', HttpResponseMessage.Content: '[PII 已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]'

我该如何解决这个问题?

第二个问题:如何从控制器访问访问令牌以便能够向 People API 发送请求?

最好的问候, 迈克

【问题讨论】:

  • 所以你从异常转到链接?

标签: c# asp.net-core authentication


【解决方案1】:

[关于如何在控制器中访问用户]

你使用 JWT 令牌吗?如果是这样,我访问它:

this.HttpContext.User;

那么,如果您还没有修改它,jwt 有效负载将分为几个声明。在我的情况下,默认情况下令牌是有状态的(意味着其中包含用户信息),并且用户 ID 存储在第五个声明中

.Claims.ToList()[5].Value;

【讨论】:

  • 红,您好,感谢您的回答。我没有配置 jwt 令牌。我该怎么做?
  • 我使用了 SPA 的默认模板(单页应用程序,带有 react 或 angular 的 mvc),并且默认设置为使用 jwt 的令牌持有者身份验证。你也在做同样的事情吗?
  • 你好@Red,不,我使用的是 mvc razor pages 技术。在那里,默认情况下没有实现身份验证。
  • developers.google.com/identity/protocols/oauth2/openid-connect 我认为默认情况下是 jwt,尝试访问 HTTPContext 用户并查看它在声明字段中的内容编辑:但现在我记得您仍然无法使 oAuth 工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2021-07-26
  • 2018-06-15
  • 2014-01-30
  • 2020-10-08
  • 2019-01-28
  • 2020-05-06
相关资源
最近更新 更多