因此,当我尝试在 .NET Core 应用程序中设置 OpenIDConnect 进行身份验证时,遇到了一个相当不寻常的问题。
我已经使用 Okta 运行了测试,一切正常,但是当使用不同的服务切换详细信息以进行身份验证时,我收到以下错误。
OpenIdConnectProtocolException: Message contains error: 'invalid_scope', error_description: 'The requested scope is invalid, unknown, malformed, or exceeds that which the client is permitted to request.', error_uri: 'error_uri is null'.
Program.cs 文件中的所有内容看起来都已正确设置,如下所示
.AddOpenIdConnect(o =>
{
o.SignInScheme = "Cookies";
o.ClientId = config.GetSection("SsoConfig:ClientId").Value;
o.ClientSecret = config.GetSection("SsoConfig:ClientSecret").Value;
o.Authority = config.GetSection("SsoConfig:Authority").Value;
o.SignedOutRedirectUri = config.GetSection("SsoConfig:SignedOutRedirectUri").Value;
o.ResponseType = "code";
o.Scope.Add("openid");
o.Scope.Add("profile")
}
有什么想法可能会导致此错误吗?据我所知,一切都设置正确,并且在使用 Okta 时它可以工作,但我们切换到它的另一个提供商失败并出现上述错误。这是客户使用的第 3 方服务,我们必须连接到该服务,因此我们提供了我在 Okta 上输入的相同详细信息,因此我知道它们应该可以工作。
也许我错过了一些明显的东西,但文档显示了上述方法。
作为参考,它是一个 .NET 6 Core Web 应用程序,我使用的库是 Microsoft.AspNetCore.Authentication.OpenIdConnect (6.0.9)
非常感谢。
虽然我很晚才回答这个问题,但今天我在使用 AWS Cognito 进行身份验证时也遇到了同样的问题。
我发现
AddOpenIdConnect
方法默认添加 2 个两个范围 - openid
和 profile
,这就产生了问题。
作为解决方案,我只是清除了默认范围并手动添加了所需的范围。
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme , options =>
{
.
.
.
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("email");
options.Scope.Add("phone");
});
就我而言,我必须删除以下中间件方法,因为我的身份提供程序 (Cognito) 未配置刷新令牌(
ALLOW_REFRESH_TOKEN_AUTH
已禁用)。
builder.Services.ConfigureCookieOidcRefresh(CookieAuthenticationDefaults.AuthenticationScheme, MS_OIDC_SCHEME);
仅供参考,我正在关注 Microsoft“BlazorWebAppOidc”示例:
https://github.com/dotnet/blazor-samples/tree/main/8.0/BlazorWebAppOidc