验证来自多个来源的令牌(例如 Cognito 和 Azure)

2023-11-25

我们正在开发一个 API,允许用户通过多个不同的提供商进行身份验证。单独的提供商不是问题,但将它们一起使用却被证明是一个挑战。

似乎添加超过 1 个提供商会引发InvalidOperationException应用程序启动时显示“方案已存在:承载”。

下面是ConfigureServices函数来自Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = "Value";
            options.Audience = "Value";
        })
        .AddMicrosoftIdentityWebApi(options =>
        {
            Configuration.Bind("AzureAdB2C", options);

            options.TokenValidationParameters.NameClaimType = "name";
        },
        options => { Configuration.Bind("AzureAdB2C", options); });
    
    services.AddControllers();
    services.AddAuthorization(options =>
    {
        options.DefaultPolicy = new AuthorizationPolicyBuilder(
            JwtBearerDefaults.AuthenticationScheme)
            .RequireAuthenticatedUser()
            .Build();
    });
}

我正在使用微软的例子用于使用 Azure AD 进行身份验证作为起点。删除任一AddJwtBearer or AddMicrosoftIdentityWebApi调用工作正常,但我需要为我们的用例配置两个提供程序。

有没有办法在 .NET Core 3.1 或更高版本上做到这一点?


我们无法在同一方案名称下注册 2 个身份验证。因此,我们需要使用不同的名称注册 2 个身份验证方案(或者一个使用默认方案,另一个使用方案名称) 就我而言,我注册了 2 个身份验证方案:

  1. 我自己的 JWT 方案,我们的应用程序名称为“MyAppName”,
  2. 使用 JWT 默认方案的 Azure AD 身份验证JwtBearerDefaults.AuthenticationScheme,因为我无法使用自定义方案名称添加它。

我能够使用以下配置使其工作:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer("MyAppName",options =>
    {
         options.Authority = "Value";
         options.Audience = "Value";                    
    })
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");

和授权配置:

services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder(
        "MyAppName",
        JwtBearerDefaults.AuthenticationScheme)
    .RequireAuthenticatedUser()
    .Build();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证来自多个来源的令牌(例如 Cognito 和 Azure) 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 启动时出现 OData v4 错误:找不到段“Whatever”的资源

    我正在构建新的 v4 服务 一切进展顺利 直到我为新模型 实体添加了新控制器 并在启动站点进行测试运行时收到此错误 控制器似乎编码正确 就像其他控制器一样 控制器 CustomersOData 中的操作 GetFeed 上的路径模板 Cus
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • Server.MapPath - 给定的物理路径,预期的虚拟路径

    我正在使用这行代码 var files Directory GetFiles Server MapPath E ftproot sales 在文件夹中查找文件 但是我收到错误消息说 给定物理路径但虚拟路径 预期的 我对在 C 中使用 Sys
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 当另一个线程可能设置共享布尔标志(最多一次)时,是否可以读取共享布尔标志而不锁定它?

    我希望我的线程能够更优雅地关闭 因此我尝试实现一个简单的信号机制 我不认为我想要一个完全事件驱动的线程 所以我有一个工作人员有一种方法可以使用关键部分优雅地停止它Monitor 相当于C lock我相信 绘图线程 h class Drawi
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • Laravel 5. 调试模式

    我将调试模式设置为true在 config gt app 中并将其部署到服务器上 debug gt env APP DEBUG true 我在控制器中有以下代码来检查模式 debug config app debug var dump de
  • Android 媒体录制:java.lang.RuntimeException:启动失败

    我正在处理电话录音 当我开始录制电话时 不幸的是它停止了 它给出了错误MediaRecorder启动失败 2147483648 我参考这个答案link 但我不明白 请告诉我我的代码有什么问题 这是我的代码 public class Inco
  • git `merge --squash` 不会添加“合并”标头来提交

    我想知道所有工具如何知道合并哪些分支 提交 直到我在提交中找到 合并 标头 我的问题是 为什么git merge squash不添加该标头 同时git merge does 换句话说 为什么我在合并时看到合并边缘git merge虽然没有边
  • 反连接比左外连接更有效吗?

    评论于这个答案注意到反连接可能已经过优化 比 Oracle 中的外连接更有效 我很想知道什么解释 证据可能支持或反驳这一说法 当您在 SQL 查询中使用 不存在 或 不在 时 您可以让 Oracle 选择合并反连接或散列反连接访问路径 快速
  • 避免应用程序请求对话框中出现错误 100:无效参数(需要有效的重定向 URI)

    我正在为 Facebook 开发一款游戏 我需要一种让用户邀请其他人加入游戏的方法 为此 我使用应用请求对话框 我将用户重定向到对话框 URL 将其粘合在一起 如下所示 url http www facebook com dialog ap
  • 可以在 vi 上映射 shift + shift 吗?

    我正在尝试使用 shift shift 配置键映射 这可能吗 我努力了
  • MFMailComposeViewController 不解雇

    我有在 didSelectRowAtIndexPath 中调用的以下代码 问题是 当我点击取消按钮时 它提示保存草稿或放弃 但是当我单击其中任何一个时 视图都不会消失 我在 iOS 5 之前的应用程序中使用了相同的代码 并且效果很好 有任何
  • jQuery.ajax 中是否弃用 success 参数?

    今天我听说 jQuery ajax 函数中的 success Parameter 已被弃用 我理解正确吗 或者我误解了什么 例如 这在将来将不起作用 ajax url ax comment php type POST data mode v
  • JPA getSingleResult() 或 null

    我有一个insertOrUpdate方法插入一个Entity当它不存在时或更新它 如果存在 为了实现这一点 我必须findByIdAndForeignKey 如果它返回null如果没有则插入 然后更新 问题是如何检查它是否存在 所以我尝试了
  • T-SQL IsNumeric() 和 Linq-to-SQL

    我需要从数据库中找到满足特定格式约定的最高值 具体来说 我想找到看起来像的最高值 EU999999 9 是任意数字 select max col 将返回类似 EUZ 的内容 例如我想排除的内容 以下查询可以解决问题 但我无法通过 Linq
  • Haskell QuickCheck2 使用 ByteString?

    RWH 书籍说要获得 ByteString 支持 我需要添加 instance Arbitrary B ByteString where arbitrary fmap B pack arbitrary coarbitrary coarbit
  • 使用 Roxygen 在 NAMESPACE 中制作 S3method

    我想使用 roxygen2 导出一个名为 myclass 的 S3 方法 但我看不到一个干净的方法来执行此操作 我需要 NAMESPACE 才能拥有 S3method myclass 或者在我需要包后无法使用该方法 但 roxygen2 似
  • 用于语言和文化感知软件的术语

    我一直认为术语 国际化 和 本地化 以及它们有趣的缩写 i18n 和 l10n 被普遍接受并用于谈论意识到语言和文化差异的软件 但我最近读到了一个关于这些主题的问题 其中提到了 全球化 并且也被标记为 全球化 因为我之前没有听说过这个术语
  • 接受 QGraphicsScene 上的放置

    我正在尝试实现拖放QGraphicsScene 以下是我超载的事件 void TargetScene dragEnterEvent QGraphicsSceneDragDropEvent event bool acceptDrag fals
  • 使用 virtualenv 安装 django1.7 和 Python 3.4

    关于使用配置为 Python 3 4 的 virtualenv 设置 django 1 7 我遇到了一些困难 我使用以下命令创建了一个 Python 3 4 virtualenv sudo virtualenv no site packag
  • Galaxy S 和 Galaxy S2 的最小宽度

    我正在开发一个 Android Widget 需要区分Galaxy S and Galaxy S2 我几乎阅读了所有有关屏幕尺寸和密度的文章 当然 我需要将新的限定符与新的限定符一起使用最小宽度 我的问题是 sw320dp 预选赛与 Gal
  • 单值 Mysqli [重复]

    这个问题在这里已经有答案了 我正在尝试编写一个函数 该函数将使用 mysqli 检查数据库中的单个值 而不必将其放入数组中 除了我已经在这里做的事情之外 我还能做什么 function getval query mysqli new mys
  • 如何从 Java 获取连接到 Websphere MQ 队列的消费者数量

    我正在尝试从 Java 获取特定 Websphere MQ 队列的使用者数量 我需要知道在将消息放入队列之前是否有人会使用它们 首先 值得注意的是 所提出的设计是一个非常非常糟糕的设计 效果是将异步消息传递回同步消息传递 这将消息生产者与消
  • Braintree Drop-in UI:错误:无法解析:org.jfrog.cardinalcommerce.gradle:cardinalmobilesdk:2.2.1-2?

    I am integrating Braintree Drop in UI but my project is not getting compiled I have used below dependency implementation
  • 验证来自多个来源的令牌(例如 Cognito 和 Azure)

    我们正在开发一个 API 允许用户通过多个不同的提供商进行身份验证 单独的提供商不是问题 但将它们一起使用却被证明是一个挑战 似乎添加超过 1 个提供商会引发InvalidOperationException应用程序启动时显示 方案已存在