对IdentityServer4用户的声明未包含在JWT中,也未发送到Web Api

尼科夫

遵循了IdentityServer4的官方文档,我到达了一个MVC客户端应用程序,IdentityServer4和一个Web Api(运行资源服务器)的地步。IS4主页显示了该用户的所有声明,并且当使用访问令牌调用api时,我们再次得到所有用户的声明。

示例代码在此处可用,尽管可能没有必要,但我只是缺少一些明显的东西。

无论如何,为了简单起见,我们不要从数据库中获取声明,而只是分配一个随机的硬编码的声明:

public class ProfileService : IProfileService
{
    public Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        context.IssuedClaims.Add(new System.Security.Claims.Claim("role", "admin"));
        return Task.FromResult(0);
    }
    ...
}

我在启动文件中注册了定制Profile服务,现在当我登录IS4时,看到了其他声明。

但是,在调用Web api(资源服务器)时,此附加声明不包括在JWT中。api调用代码:

    public async Task<IActionResult> CallApiUsingUserAccessToken()
    {
        var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");

        var client = new HttpClient();
        client.SetBearerToken(accessToken);
        var content = await client.GetStringAsync("http://localhost:5001/identity");

        ViewBag.Json = JArray.Parse(content).ToString();
        return View("json");
    }

(所有api所做的就是返回User.Claims的列表)。我添加的声明不存在,并且当我调试代码并选择访问令牌字符串并在jwt.io上对其进行解码时,再也没有这样的声明。

问题是:我想念什么?HttpContext.Authentication.GetTokenAsync对我的用例不利吗?如果是,那么-我应该使用什么替代品?

编辑:这是OpenId Connect选项(在MVC客户端上):

        app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {
            AuthenticationScheme = "oidc",
            SignInScheme = "Cookies",

            Authority = "http://localhost:5000",
            RequireHttpsMetadata = false,

            ClientId = "mvc",
            ClientSecret = "secret",

            ResponseType = "code id_token",
            Scope = { "api1", "offline_access" },

            GetClaimsFromUserInfoEndpoint = true,
            SaveTokens = true
        });
最低特权

我想原因是您尚未为您的API分配任何声明。这就是为什么我们根本不致电个人资料服务的原因。

这是一个普遍的问题,并且有些矛盾,因为我们一直在为身份令牌调用配置文件服务。

我们在1.0.2中更改了此行为

https://github.com/IdentityServer/IdentityServer4/releases/tag/1.0.2

请重试,看看是否能达到预期效果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

IdentityServer4 API资源与API范围中的用户声明是什么

来自分类Dev

邮递员参数未发送到Web api控制器

来自分类Dev

邮递员参数未发送到Web api控制器

来自分类Dev

将JWT发送到/ token API操作时出现“请检查'iss'声明”错误

来自分类Dev

将文件发送到api中

来自分类Dev

为什么将授权JWT发送到Web API时失败?

来自分类Dev

IdentityServer4登录api

来自分类Dev

IdentityServer4:调用Web API时观众是空的吗?

来自分类Dev

将用户凭证发送到Rails API的正确方法

来自分类Dev

将Angular FormData中的int列表发送到C#中的POST Web API

来自分类Dev

数组数据未发送到 API 控制器 c#

来自分类Dev

将变量发送到Web API方法

来自分类Dev

使用http party将json发送到Web API

来自分类Dev

将Cookie从客户端发送到Web API

来自分类Dev

如何将对象数组从Angular发送到HttpGet中的Web API Core?

来自分类Dev

Django manytomany字段未包含在api调用中

来自分类Dev

将对象数组发送到Powershell中的API

来自分类Dev

将请求发送到Java中的Google Elevation API

来自分类Dev

变量未从 Axios 发送到响应中的 API 点

来自分类Dev

ASP.Net Web API HttpClient 不会将数据发送到目标 Web API Uri

来自分类Dev

在 identityserver4 中添加用户声明

来自分类Dev

使用IdentityServer4对API进行自定义JWT身份验证

来自分类Dev

发送到API的内容被截断

来自分类Dev

使用JavaScript将“%”发送到API

来自分类Dev

Angular,将json发送到API

来自分类Dev

Angular / Web API:将FormFile信息从客户端发送到API

来自分类Dev

使用httponly cookie将JWT从节点REST API发送到Vue.js SPA

来自分类Dev

使用oauth2和AngularJS将其他参数发送到Web API中的令牌

来自分类Dev

如何将表单的数据发送到用Angular中的[FromForm]装饰的ASP.NET Core Web API操作?

Related 相关文章

  1. 1

    IdentityServer4 API资源与API范围中的用户声明是什么

  2. 2

    邮递员参数未发送到Web api控制器

  3. 3

    邮递员参数未发送到Web api控制器

  4. 4

    将JWT发送到/ token API操作时出现“请检查'iss'声明”错误

  5. 5

    将文件发送到api中

  6. 6

    为什么将授权JWT发送到Web API时失败?

  7. 7

    IdentityServer4登录api

  8. 8

    IdentityServer4:调用Web API时观众是空的吗?

  9. 9

    将用户凭证发送到Rails API的正确方法

  10. 10

    将Angular FormData中的int列表发送到C#中的POST Web API

  11. 11

    数组数据未发送到 API 控制器 c#

  12. 12

    将变量发送到Web API方法

  13. 13

    使用http party将json发送到Web API

  14. 14

    将Cookie从客户端发送到Web API

  15. 15

    如何将对象数组从Angular发送到HttpGet中的Web API Core?

  16. 16

    Django manytomany字段未包含在api调用中

  17. 17

    将对象数组发送到Powershell中的API

  18. 18

    将请求发送到Java中的Google Elevation API

  19. 19

    变量未从 Axios 发送到响应中的 API 点

  20. 20

    ASP.Net Web API HttpClient 不会将数据发送到目标 Web API Uri

  21. 21

    在 identityserver4 中添加用户声明

  22. 22

    使用IdentityServer4对API进行自定义JWT身份验证

  23. 23

    发送到API的内容被截断

  24. 24

    使用JavaScript将“%”发送到API

  25. 25

    Angular,将json发送到API

  26. 26

    Angular / Web API:将FormFile信息从客户端发送到API

  27. 27

    使用httponly cookie将JWT从节点REST API发送到Vue.js SPA

  28. 28

    使用oauth2和AngularJS将其他参数发送到Web API中的令牌

  29. 29

    如何将表单的数据发送到用Angular中的[FromForm]装饰的ASP.NET Core Web API操作?

热门标签

归档