api使用引用令牌或JWT验证

时间:2018-03-26 21:49:08

标签: identityserver4

我正在尝试从身份服务器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是否可以使用。 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的问题是typo错误。

在您的JWT中,我看到受众群体(aud声明)为customAPI(小写字母'c'),而在您的客户端配置中,API名称为CustomAPI (资本'C')。让它们变得相同。