如何对 asp.net 核心 Blazor 应用程序中的 oAuth 身份验证进行故障排除
How to troubleshoot oAuth authentication in asp.net core Blazor App
我正在尝试在 Asp.Net Core Blazor 应用程序中设置 Strava 身份验证(即普通的 oAuth2)。
我是 Blazor 和 Web 开发人员的新手(更多的是后端背景),我似乎不知道如何解决身份验证不起作用的原因。
当我在(默认)Blazor 服务器应用程序的登录页面上单击 oAuth 登录按钮时,我被重定向到正确的 oAuth 登录屏幕(在我的例子中是 Strava),但是在我成功输入凭据之后那个App,登录页面显示错误Error loading external login information.
虽然我很感激任何可以指出我的代码中错误的帮助或提示,但我主要是在寻找一种方法来获得更好的错误信息和故障排除功能。在 EventHandler 委托中设置断点并没有显示太多。
这是我配置身份验证设置的 Startup.cs
摘录:
services.AddAuthentication().AddOAuth("Strava",
oAuthOptions =>
{
oAuthOptions.ClientId = "myappid";
oAuthOptions.ClientSecret = "myclientsecret";
oAuthOptions.Scope.Clear();
oAuthOptions.Scope.Add("read");
oAuthOptions.CallbackPath = "/profile";
oAuthOptions.AuthorizationEndpoint = "https://www.strava.com/oauth/authorize";
oAuthOptions.TokenEndpoint = "https://www.strava.com/api/v3/oauth/token";
oAuthOptions.SignInScheme = IdentityConstants.ExternalScheme;
oAuthOptions.Events = new OAuthEvents()
{
OnRemoteFailure = loginFailureHandler =>
{
Console.WriteLine("Remote Error");
Console.WriteLine(loginFailureHandler.Failure.Message);
return Task.FromResult(0);
},
OnAccessDenied = handler =>
{
Console.WriteLine(handler.Response.StatusCode);
return Task.FromResult(0);
}
};
});
一个更新让我觉得有用,所以也许它可以帮助其他人。
我执行了以下操作,以便更好地控制整个身份验证过程。
- 我搭建了两个页面,然后我可以在其中调试和单步执行(显然也可以更新和更改内容)。在 this post 中找到了更多信息:
- Account.Login,可自定义实际登录页面
dotnet aspnet-codegenerator identity -dc CotacolApp.Data.ApplicationDbContext --files "Account.Login"
- Account.ExternalLogin,可以自定义实际的 strava 页面
dotnet aspnet-codegenerator identity -dc CotacolApp.Data.ApplicationDbContext --files "Account.ExternalLogin"
- 然后我发现
var info = await _signInManager.GetExternalLoginInfoAsync();
总是产生 null
值。那是因为我必须将 IdentityScheme 设置为外部。 ```
- 之后,我不得不 运行 一些自定义逻辑来进行声明映射。 @Morgeh 在 this Whosebug post 中写下了大部分细节。
希望这对以后的人有所帮助。
我正在尝试在 Asp.Net Core Blazor 应用程序中设置 Strava 身份验证(即普通的 oAuth2)。 我是 Blazor 和 Web 开发人员的新手(更多的是后端背景),我似乎不知道如何解决身份验证不起作用的原因。
当我在(默认)Blazor 服务器应用程序的登录页面上单击 oAuth 登录按钮时,我被重定向到正确的 oAuth 登录屏幕(在我的例子中是 Strava),但是在我成功输入凭据之后那个App,登录页面显示错误Error loading external login information.
虽然我很感激任何可以指出我的代码中错误的帮助或提示,但我主要是在寻找一种方法来获得更好的错误信息和故障排除功能。在 EventHandler 委托中设置断点并没有显示太多。
这是我配置身份验证设置的 Startup.cs
摘录:
services.AddAuthentication().AddOAuth("Strava",
oAuthOptions =>
{
oAuthOptions.ClientId = "myappid";
oAuthOptions.ClientSecret = "myclientsecret";
oAuthOptions.Scope.Clear();
oAuthOptions.Scope.Add("read");
oAuthOptions.CallbackPath = "/profile";
oAuthOptions.AuthorizationEndpoint = "https://www.strava.com/oauth/authorize";
oAuthOptions.TokenEndpoint = "https://www.strava.com/api/v3/oauth/token";
oAuthOptions.SignInScheme = IdentityConstants.ExternalScheme;
oAuthOptions.Events = new OAuthEvents()
{
OnRemoteFailure = loginFailureHandler =>
{
Console.WriteLine("Remote Error");
Console.WriteLine(loginFailureHandler.Failure.Message);
return Task.FromResult(0);
},
OnAccessDenied = handler =>
{
Console.WriteLine(handler.Response.StatusCode);
return Task.FromResult(0);
}
};
});
一个更新让我觉得有用,所以也许它可以帮助其他人。
我执行了以下操作,以便更好地控制整个身份验证过程。
- 我搭建了两个页面,然后我可以在其中调试和单步执行(显然也可以更新和更改内容)。在 this post 中找到了更多信息:
- Account.Login,可自定义实际登录页面
dotnet aspnet-codegenerator identity -dc CotacolApp.Data.ApplicationDbContext --files "Account.Login"
- Account.ExternalLogin,可以自定义实际的 strava 页面
dotnet aspnet-codegenerator identity -dc CotacolApp.Data.ApplicationDbContext --files "Account.ExternalLogin"
- Account.Login,可自定义实际登录页面
- 然后我发现
var info = await _signInManager.GetExternalLoginInfoAsync();
总是产生null
值。那是因为我必须将 IdentityScheme 设置为外部。 ``` - 之后,我不得不 运行 一些自定义逻辑来进行声明映射。 @Morgeh 在 this Whosebug post 中写下了大部分细节。
希望这对以后的人有所帮助。