生成的 jwt 令牌中的受众为空

问题描述

我正在尝试使用 OpenIddict 作为授权服务器,并且我设法生成一个令牌,但是我不知道如何将“aud”声明放入令牌中。

我当然可以手动将它添加到创建的 ClaimsPrincipal,但我想知道是否有类似 IdentityServer 的方法。在 IdentityServer 中,您可以声明 api 资源,对于这些资源,您可以声明范围。如果请求了 API 资源的范围,则 API 资源的名称将作为受众包含在内。

有没有办法告诉 OpenIddict,如果请求范围,包括特殊受众,或者必须手动实施?

解决方法

您可以在通过范围管理器创建范围时将资源列表附加到范围:

await manager.CreateAsync(new OpenIddictScopeDescriptor
{
    DisplayName = "Demo API access",DisplayNames =
    {
        [CultureInfo.GetCultureInfo("fr-FR")] = "Accès à l'API de démo"
    },Name = "demo_api",Resources =
    {
        "resource_server"
    }
});

然后,使用 ListResourcesAsync(scopes) 列出与指定范围关联的所有资源。例如:

principal.SetResources(await _scopeManager.ListResourcesAsync(principal.GetScopes()).ToListAsync());