我正在尝试从身份服务器4获取api来验证令牌(包括jwt和引用)。令牌的第一部分如下所示:
{
alg: "RS256",
kid: "09E9884444C4E3221983C13333333333333334A",
typ: "JWT",
x5t: "CemILYTE3432GGGGGGGGGGGG"
}.
{
nbf: 1522084412,
exp: 1522088012,
iss: "https://authserv:8097",
aud: [
"https://authserv:8097/resources",
"customAPI"
],
client_id: "program",
sub: "user1",
auth_time: 1522084412,
idp: "local",
scope: [
"openid",
"scope1"
],
amr: [
"pwd"
]
}.
startup.cs中的设置如下所示:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
options.Authority = "https://authserv:8097";
options.SupportedTokens = SupportedTokens.Both;
options.RequireHttpsMetadata = false;
// options.ApiName = "CustomAPI";
// options.ApiSecret = "secret";
});
services.AddMvc(options =>
{
var policy = ScopePolicy.Create("scope1");
options.Filters.Add(new AuthorizeFilter(policy));
});
在这种形式下,杰森令牌起作用。如果我取消注释apiName和apiSecret,JWT将不再起作用,并且会给出一个"观众无效"错误。通过apiName和apisecret取消注释,引用令牌可以正确验证。我是否遗漏了配置中的某些内容,以使JWT对apiName有效,而apiSecret未注释掉?
我正在尝试获取一个环境设置,我可以让身份服务器使用JWT或引用令牌,具体取决于参数的设置方式和api是否可以使用。 提前感谢您的帮助。
答案 0 :(得分:1)
您的问题是typo
错误。
在您的JWT中,我看到受众群体(aud
声明)为customAPI
(小写字母'c'),而在您的客户端配置中,API名称为CustomAPI
(资本'C')。让它们变得相同。