这个问题通常是由于未正确配置OAuth设置或由于传递的参数不正确而引起的。为解决此问题,应该仔细检查OAuth设置和传递的参数是否准确,并参考以下示例中的代码进行调整:
services.AddAuthentication()
.AddDiscord(options =>
{
options.ClientId = Configuration["Discord:ClientId"];
options.ClientSecret = Configuration["Discord:ClientSecret"];
options.Scope.Add("identify");
options.Scope.Add("email");
options.TokenEndpoint = "https://discord.com/api/oauth2/token";
options.UserInformationEndpoint = "https://discord.com/api/users/@me";
options.SaveTokens = true;
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
options.ClaimActions.MapJsonKey(ClaimTypes.Name, "username");
options.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
options.Events = new OAuthEvents
{
OnCreatingTicket = async context =>
{
string url = "https://discord.com/api/users/@me/guilds";
var response = await context.Backchannel.GetAsync(url, context.HttpContext.RequestAborted);
response.EnsureSuccessStatusCode();
var guilds = JsonSerializer.Deserialize>(await response.Content.ReadAsStringAsync());
var adminIds = Configuration["Discord:AdminIds"].Split(',').ToList();
context.Principal.AddIdentity(new ClaimsIdentity(adminIds.Select(id => new Claim(ClaimTypes.Role, id))));
}
};
});
在这里,我们配置了Discord的ClientId和ClientSecret,并设置了必要的范围、终结点和事件。我们还添加了一个OAuth事件,OnCreatingTicket,以在创建凭证时向用户声明角色。
使用上述代码示例,您可以重新配置您的OAuth设置并正确传递参数,以避免登录时出现OAuth token endpoint failure: BadRequest错误。
上一篇:AspNet.ScriptManager.bootstrap是什么?
下一篇:AspNet.Security.OpenIdConnect.Server 的 Token Revocation 和 Logout 不起作用。