问题描述: 在使用 ADFS v4.0 的过程中,调用 /userinfo 端点时返回 405 错误。
解决方法:
检查 ADFS 配置: 确保 ADFS 的 Web API 允许使用 /userinfo 端点。可以通过以下步骤进行检查和配置:
检查客户端代码: 确保你的客户端代码正确地调用了 /userinfo 端点。以下是一个示例代码片段,使用 C# 和 HttpClient 调用 /userinfo 端点:
using System.Net.Http;
using System.Threading.Tasks;
public class UserInfoClient
{
private readonly HttpClient _httpClient;
public UserInfoClient()
{
_httpClient = new HttpClient();
}
public async Task GetUserInfo(string accessToken)
{
_httpClient.SetBearerToken(accessToken);
var response = await _httpClient.GetAsync("https://your-adfs-server/userinfo");
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
return null;
}
}
请确保你的代码中的 "https://your-adfs-server/userinfo" 部分与你的 ADFS 服务器的实际地址相匹配。
services.AddAuthentication()
.AddOpenIdConnect("adfs", "ADFS", options =>
{
// 其他配置...
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.Scope.Add("offline_access");
options.GetClaimsFromUserInfoEndpoint = true;
options.SaveTokens = true;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
options.Authority = "https://your-adfs-server";
options.ResponseType = "code";
options.CallbackPath = "/signin-adfs";
options.SignInScheme = "Cookies";
});
请确保你的代码中的 "https://your-adfs-server" 部分与你的 ADFS 服务器的实际地址相匹配。
希望以上解决方法能帮助到你解决问题!