可以将 OpenId 文档下载到本地,并提供给使用网站。具体实现方法如下:
// 实例化 OpenID Connect 的配置管理器
var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(metadataAddress, new OpenIdConnectConfigurationRetriever());
// 从配置管理器中获取 OpenID Connect 配置信息
var config = await configManager.GetConfigurationAsync();
// 将配置信息序列化为 JSON 格式的字符串
var jsonConfig = JsonConvert.SerializeObject(config);
// 将 JSON 格式的字符串保存到本地
File.WriteAllText("openid_config.json", jsonConfig);
// 从本地读取 JSON 格式的配置信息
var localJsonConfig = await File.ReadAllTextAsync("openid_config.json");
// 将 JSON 格式的配置信息反序列化为 OpenIDConnectConfiguration 对象
var localConfig = JsonConvert.DeserializeObject<OpenIdConnectConfiguration>(localJsonConfig);
// 使用本地的 OpenID Connect 配置信息进行身份验证
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKeys = localConfig.SigningKeys,
ValidateIssuer = true,
ValidIssuer = localConfig.Issuer,
ValidateAudience = true,
ValidAudience = clientId,
ValidateLifetime = true,
ClockSkew = TimeSpan.FromMinutes(5)
};
SecurityToken validatedToken;
var handler = new JwtSecurityTokenHandler();
var user = handler.ValidateToken(token, tokenValidationParameters, out validatedToken);
在上述代码中,首先实例化 OpenID Connect 的配置管理器,并从配置管理器中获取配置信息。然后将配置信息序列化为 JSON 格式的字符串,并将其保存到本地。当需要使用配置信息进行身份验证时,则从本地读取 JSON 格式的配置信息,并反序列化为 OpenIDConnectConfiguration 对象,最终通过该对象进行身份验证。