ASP.NET Core 3.1:API 控制器中的 User.Identity.Name 为空,但声明名称存在

2024-02-03

我正在将 Identity Server 添加到我现有的项目中。基本上我已经准备好了一切,但是当我向 API 发出请求时,User.Identity.Name一片空白。但是,那User.Identity.Claims包含名称声明:

我知道通过以下方式获取用户名的方法HttpContext.User.FindFirstValue(ClaimTypes.Name),但是这需要大量的代码重构,所以我宁愿避免这种方式。

我按照以下方式在身份服务器中配置了 ApiResources:

public static IEnumerable<ApiResource> ApiResources => new[]
{
    new ApiResource
    {
        Name = "my-api",
        DisplayName = "My API",
        Description = "My API",
        Scopes = new List<string> { "my-api"},
        UserClaims = new List<string> {
            JwtClaimTypes.Email,
            JwtClaimTypes.Name,
            JwtClaimTypes.Subject,
            JwtClaimTypes.Role,
        }
    }
};

和客户:

public static IEnumerable<Client> Clients =>
    new List<Client>
    {
        new Client
        {
            // ...
            AllowedScopes =
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                IdentityServerConstants.StandardScopes.Email,
                "name",
                "roles",
                "my-api",
            }
        }
    };

API项目中的身份验证设置:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
    options.Authority = config["IdentityServer:Domain"];

    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidIssuer = config["IdentityServer:Domain"],
        ValidateAudience = false
    };
});

services.AddAuthorization(options =>
{
    options.AddPolicy("ApiScope", policy =>
    {
        policy.RequireAuthenticatedUser();
        policy.RequireClaim("scope", "my-api");
    });
});

请建议我做错了什么?


问题在于,Microsoft 和 OpenID connect 对于“名称”声明的名称应该是什么有不同的看法。因此,您需要做的是告诉系统名称声明的名称是什么,方法是:

    .AddJwtBearer(opt =>
    {
        ...      
        opt.TokenValidationParameters.RoleClaimType = "roles";
        opt.TokenValidationParameters.NameClaimType = "name";
        ...
    }

为了补充这个答案,我写了一篇博客文章,详细介绍了这个主题:调试 ASP.NET Core 中的 JwtBearer 声明问题 https://nestenius.se/2023/06/02/debugging-jwtbearer-claim-problems-in-asp-net-core/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 3.1:API 控制器中的 User.Identity.Name 为空,但声明名称存在 的相关文章

  • 如何在 ASP.NET Core 中设置 cookie validateInterval?

    我正在尝试设置validateInterval对于 ASP NET 5 RC1 应用程序 它使用ASP NET Identity 3 我正在尝试实现代码this https stackoverflow com questions 33463
  • Asp.net core 2.1 OpenIdConnectOptions 范围不起作用

    请告诉我为什么我无法添加任何范围OpenIdConnectOptions 它不适用于 ASP NET Core MVC 客户端 但使用 js 客户端则可以正常工作 我的代码 身份服务器4客户注册 public static IEnumera
  • TestContext.DataRow["MyColumnName"] 的替代品是什么

    在 Net Core 单元测试项目中使用 MSTest 我正在尝试使用 csv 数据源来提供测试方法的数据 以前 我会在 Net Framework 测试项目中使用如下所示的内容 DataSource Microsoft VisualStu
  • 如何使用Dot net core WEB API实现文件上传?

    我正在开发 ASP DOT NET core Web api 我需要发送多个附件 我尝试如下
  • index.g.cshtml 在哪里

    我正在尝试完成本教程 但是 通常 当我构建解决方案时 我会得到一个CS0234错误指出文件中缺少命名空间Index g cshtml cd 但是这个文件存在于哪里呢 我努力了 所有构建 清理 重建解决方案选项 我已重新启动 Visual S
  • 在project.json .Net Core中本地管理nuget

    我不想依赖 nuget 服务来下载依赖项 我想在我的 Net Core 应用程序中本地下载并使用 nuget 包 是否可以 方法与之前相同 打开您的NuGet config https docs nuget org consume nuge
  • 在 React Native 应用程序中哪里可以获取 EXPO DEBUG 值?

    当我尝试登录 expo 时出现此错误 exp Set EXPO DEBUG true in your env to view the stack trace 你知道我到底要在哪里设置值吗EXPO DEBUG EXPO DEBUG是一个环境变
  • 如何根据 ASP.NET VNEXT MVC6 中给出的路径进行虚拟路由/重定向?

    我有一个网站 它在不同的路径上公开多个 API 每个 API 由特定于应用程序部分的控制器处理 例如example com Api Controller Action param1 stuff 其中控制器发生变化 但操作保持相当一致 我有几
  • Docker Hub API v2 令牌身份验证问题

    目前 我正在开发一个非常轻量级版本的 Docker 容器编排器 并且我必须能够从公共 Docker Hub 注册表获取图像摘要 我想使用 Docker Registry API v2 来实现此目的 我正在尝试使用以下 API 调用获取授权令
  • Visual Studio Code 调试默认 ASP.NET Core MVC WebApp:不起作用

    我正在使用 Manjaro linux 并尝试调试默认的 ASP NET Core MVC 项目 但调试停止 没有任何错误 我创建了该项目 dotnet new mvc in a Meow文件夹 没什么特别的 然后添加了新的配置 NET C
  • 同一服务器上的多个.NET版本

    所以我一直都知道在一台计算机 客户端或服务器 上运行多个版本的 NET 框架是可以的 这个问题 https stackoverflow com questions 407306 running many versions of net on
  • 如何检查 ASP.NET Core RC2/1.0 Razor 视图的编译错误?

    Razor 视图预编译已从 RC2 中删除 https github com aspnet Mvc issues 3917 due to 让它在 NET Core 中工作的问题 https github com aspnet Mvc iss
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • asp.net core / kestrel中的线程管理

    我正在解决我们已迁移到 asp net core 2 0 的 asp net 应用程序的性能 可扩展性问题 我们的应用程序作为应用程序服务托管在 azure 上 并且在任何中等流量的情况下都很容易崩溃 让我困惑的一件事是如何处理多个并发请求
  • IdentityServer:API 资源和范围

    我的理解是 一个Client允许访问 ome 或更多ApiScope and an ApiScop与许多有联系ApiResources其名称成为观众主张的价值观 IE 1 个客户端 gt 许多 API 范围 和 1 API 范围 gt 许多
  • IClaimsTransformation 未被调用

    我正在开发 ASP NET Core Web 应用程序 NET 5 0 这是一个 Intranet 应用程序 因此我使用 Windows 身份验证 对于授权 我使用 AspNetCore Identity 中的自定义角色 出于各种原因不想使
  • 使用 Google Storage Transfer API 将数据从外部 GCS 传输到我的 GCS

    我正在开发一个由 ReactJs 前端和 Java SpringBoot 后端组成的 Web 应用程序 该应用程序要求用户将数据从他们自己的 Google Cloud 存储上传到我的 Google Cloud 存储 申请流程如下 前端请求用
  • 使用自定义 AuthenticationScheme 的 Blazor 服务器 cookie 身份验证

    我正在尝试在我的 Blazor 服务器应用程序中构建自定义 cookie 身份验证 只要我像这样使用 DefaultAuthenticateScheme 它就可以工作 builder Services AddAuthentication o
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • Coldfusion 跨站点身份验证

    好的 在我正在开发的 Coldfusion 网站上 我刚刚安装了一个名为 Galleon 的第三方 开源 CF 论坛 我不久前问过类似的问题 但现在我们已经取得了一些进展 目前的问题是 它不会识别父站点本身存在的任何变量 会话等 论坛本身存

随机推荐

  • 将 ssis 中的 sql server 查询输出导出到文本文件,包括列标题

    我一直在尝试将 SqlServer sql 查询 存储过程 的输出导出到文本文件 我使用带有 OLEDB 源和平面文件目标的数据流任务来实现它 我还想在文本文件中获取列标题以及查询结果 但我不知道如何包含列标题 我想在 SSIS 中动态地执
  • 函数式编程中的引用透明性

    我是 JS 新手 正在学习函数式编程 并遇到了 引用透明度 这个术语 另外 我发现了这样的说法 引用透明度表明用纯函数的值替换纯函数是安全的 这是否意味着只要函数变热 使用 RT 就可以让 JIT 编译器轻松地用函数的返回值替换函数 真的吗
  • 如何跨多个页面传递多个变量?

    我的网站涉及用户通过多页表单提交数据 我可以将一页上提交的数据直接传递到下一页 但是如何将其发送到之后的页面呢 这是我正在做的事情的一个非常简化的版本 Page 1 Page 2
  • 在 HTML+CSS 中的活动菜单项下添加箭头

    我正在尝试生成如下菜单 菜单中有多个项目 活动的项目后面有一个箭头 菜单项是类似以下代码的标签 div class menuCenter div class linksWrapper a href Home a a class menuCe
  • Firefox 中调整大小时背景图像下的线条闪烁

    我正在构建一个网站 其标题中有一个全宽背景图像 可随页面调整大小 在 Firefox 中调整图像大小时 图像下方会出现一条不寻常的闪烁水平线 该线不会完全显示 但会在尺寸更改时闪烁 该线出现在背景图像的底部 而不是标题元素的底部 仅当我在
  • 尝试使用 .toUpperCase() 将字母转换为大写...不起作用?

    我试图使用 toUpperCase 将数组中的字符转换为大写 但它不起作用 我很确定我的逻辑是正确的 所以不确定为什么它不起作用 var test hello 3 function LetterChanges str var testArr
  • 如何在Python中水平放置单选按钮

    AANTAL 1 1 2 2 3 3 4 4 5 5 6 6 v StringVar v set 1 for text mode in AANTAL but Radiobutton Main padx 20 pady 10 font ari
  • Magento 和 Paypal 税务舍入问题

    我对 Paypal 和 Magento 1 7 0 2 有一些舍入问题 网站上的所有价格均含税 税费按 20 增值税 计算 我去结账 一切都正确 然后我会点击下订单 Paypal 就会像这样 这是不正确的 因为现在总计少了 1p 这似乎是由
  • 表单元素未出现在 $scope 中

    这是我的表格的开始 div 这是我的控制器 app controller Customer scope function scope alert scope CustomerForm scope CustomerForm未定义 表格不应该添
  • RHEL 上的 Docker CE - 要求:container-selinux >= 2.9

    我正在尝试安装Docker CE on RHEL使用这个link https stackoverflow com questions 42981114 install docker ce 17 03 on rhel7 这是我的 RHEL 版
  • 使用 execv(C 语言)从 Linux 命令提示符运行命令

    到目前为止 我唯一感到困惑的部分是如何设置 execv 并使用第一个参数作为当前工作目录 我已经尝试过两个 和 都没有在屏幕上执行任何操作 也一样 和 我对如何让 execv 运行这样的事情感到困惑 prog ls t al 并让它在程序执
  • Scala 按索引过滤列表

    我想用函数式的方式来编写它 我能做的最好的就是 list zipWithIndex filter tt Tuple2 Thing Int gt tt 2 3 0 unzip 1 获取元素 0 3 6 有没有更易读的 Scala 习惯用法 如
  • 有没有办法从 Flurry API 获取报告的用户 ID?

    我有一个使用 Flurry 的 iOS 游戏 因此我通过 Flurry setUserID USER ID 向 Flurry 发送每个玩家的唯一 ID 几个小时后 我从 Flurry 页面 gt 事件 gt 事件日志 gt 获取此 ID下载
  • 在 Git 中强制添加子模块内容

    我在一所学校编码 要求我们使用 git 将所有工作提交到他们的服务器 每个作业都有自己的文件夹 该文件夹有自己的 git 目录 我试图将父文件夹推送到我的 github 但是当我推送时 它实际上并没有上传文件夹内的代码 因为它被视为子模块
  • 在 C# 中获取输入的正确方法是什么,Convert 与 Parse

    我看到了一些在 C 中获取用户输入的其他方法 这真的很令人困惑 我可以使用这两种方式来获取输入还是仅用于浮动 是否有更多方式获取输入 float myAge myAge Convert Toint64 Console ReadLine vs
  • 从数据库中删除满足条件的条目的最有效方法是什么?

    AFAIK 没有直接的方法可以使用谓词删除实体 例如 DbSet RemoveWhere gt 我尝试了几种删除方法 但不知道哪种方法最有效 你能指出我正确的方向吗 我尝试的第一个也是最基本的事情是 context Users Remove
  • JavaScript 中的数字格式与 C# 类似

    有没有一种简单的方法可以在 JavaScript 中格式化数字 类似于 C 或 VB NET 中可用的格式化方法ToString format provider or String Format 一般来说 在 JavaScript 中设置数
  • 对多个视图控制器中的一个观察者使用 NSNotificationCenter 选择器

    我可以使用选择器吗getUpdate 在多个视图控制器中 我正在注册我的LevelViewController作为双方的观察者GameViewController and WinViewController 后 2 个视图控制器都有一个后退
  • Admob 与 Android:无法解析清单中的 android:configChanges

    我正在尝试使用 Admob 将广告添加到我的 Android 应用程序中 但遇到了困难 Admob 表示需要以下信息logcat E Ads 26043 The android configChanges value of the com
  • ASP.NET Core 3.1:API 控制器中的 User.Identity.Name 为空,但声明名称存在

    我正在将 Identity Server 添加到我现有的项目中 基本上我已经准备好了一切 但是当我向 API 发出请求时 User Identity Name一片空白 但是 那User Identity Claims包含名称声明 我知道通过