我成功地用ASP安装了IdentityServer4。网络核心。
默认配置如下:
IdentityServerAuthenticationOptions options = new IdentityServerAuthenticationOptions()
{
Authority = "http://localhost:5000",
ScopeName = "scope",
ScopeSecret = "ScopeSecret",
AutomaticAuthenticate = true,
AutomaticChallenge = true,
RequireHttpsMetadata = false,
};
现在,使用这个指南,我配置从配置文件中读取,因此它们可以是生产中的任何数字。
例如,如果我设置API在http://*:5000
上运行,那么客户端可以通过http://192.168.1.100:5000
等服务IP地址连接到它。
一旦客户端获得承载令牌并试图使用它,Internal Server Error
就会发生,但会出现以下异常:
Unable to obtain configuration from:
'http://*:5000/.well-known/openid-configuration'.
---> System.IO.IOException: IDX10804: Unable to retrieve document from: 'http://*:5000/.well-known/openid-configuration'.
---> System.UriFormatException: Invalid URI: The hostname could not be parsed.
配置IdS4具有动态权限的正确方法是什么?
似乎问题出在发行人身上,对此有什么想法吗?
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidIssuerException:
IDX10205: Issuer validation failed. Issuer: 'http://192.168.1.100:5000'. Did not match: validationParameters.ValidIssuer: 'http://localhost:5000' or validationParameters.ValidIssuers: 'null'.
at Microsoft.IdentityModel.Tokens.Validators.ValidateIssuer(String issuer, SecurityToken securityToken, TokenValidationParameters validationParameters)
让我大吃一惊的是,我所需要的就是为IssuerUri
设置一个值(几乎任何值):
public IServiceProvider ConfigureServices(IServiceCollection services)
{
////...
var identiyBuilder = services.AddIdentityServer(options =>
{
options.RequireSsl = false;
options.IssuerUri = "MyCompany";
});
////...
}
现在,通过上面的配置,我可以通过任何IP地址使用该服务
我没有发现我可以直接输入MyCompany
但是在我的日志文件中我有以下内容:
Bearer was not authenticated. Failure message: IDX10205: Issuer validation failed. Issuer: 'https://crm.example.com'. Did not match: validationParameters.ValidIssuer: 'MyCompany' or validationParameters.ValidIssuers: 'null'.
我不太知道'发行者'是什么意思,但我能够只是采取'https://crm.example.com',让事情与此工作:
options.IssuerUri = "https://crm.example.com";