使用 MSAL 身份验证令牌使用 Web API 2

2024-01-10

我有一个 ASP.Net Web API 2,我在其中实现了以下安全性:https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapi-dotnet https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapi-dotnet

它有效,除非删除 [Authorize] 属性,否则我无法访问控制器。

现在,我在 Xamarin 应用程序中有一个登录用户。用户通过 MSAL 身份验证登录,效果也很好。 非常基本的实现:

var authenticationResult = await App.IdentityClientApp.AcquireTokenSilentAsync(App.ClientScope);
var token = authenticationResult.Token;

现在,我想通过在 DefaultRequestHeaders 中提供 MSAL 身份验证令牌来访问 Web API,如下所示:

this.httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

无论如何,这有可能吗?如何使用此令牌让我的用户使用我的 Web API?

谢谢 !


教程使用 Azure AD 中的不记名令牌帮助保护 Web API https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapi-dotnet您提到了 AD v1.0 上的目标,并且需要在 Azure 门户上注册您的应用程序。尽管MSAL https://github.com/Azure-Samples/active-directory-xamarin-native-v2以 AD v2.0 为目标,您需要在以下地址注册您的应用程序apps.dev.microsoft.com https://apps.dev.microsoft.com,并且您需要在 Web API 2 中使用中间件,如下所示:

var tvps = new TokenValidationParameters
{
    ValidAudience = clientId,
    ValidateIssuer = false,
};

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    AccessTokenFormat = new Microsoft.Owin.Security.Jwt.JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider("https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"))
});

想要了解更多详情,您可以参考活动目录-v2-devquickstarts-dotnet-api https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-devquickstarts-dotnet-api.

另外,你可以参考AppModelv2-WebAPI-DotNet https://github.com/AzureADQuickStarts/AppModelv2-WebAPI-DotNet有关 Web API 后端和移动客户端通过 MSAL 访问 Web API 后端的代码示例。

Update:

  • 我下载了代码示例AppModelv2-WebAPI-DotNet https://github.com/AzureADQuickStarts/AppModelv2-WebAPI-DotNet

  • Follow 如何使用 v2.0 端点注册应用程序 https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-app-registration注册我的应用程序 v2.0 如下:

  • 复制应用程序 ID从上面的屏幕截图并将其更新为待办事项列表客户端 and 待办事项列表服务项目如下:

  • Launch 待办事项列表服务首先,然后你可以调试待办事项列表服务如下:

另外,您可以复制Token并利用postman模拟请求,如下:

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

使用 MSAL 身份验证令牌使用 Web API 2 的相关文章

  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 如何在 SQL Server 中获取具有复合主键的表列表?

    如何创建一个查询 为我提供 SQL Server 中具有复合主键的表列表 也许使用 sys tables 或 information schema tables 或其他东西 你可以挖掘这些信息information schema table
  • PHP计数替换[重复]

    这个问题在这里已经有答案了 我有一些代码在 PHP 7 以下运行的服务器上运行良好 但在 PHP 7 上我收到一条警告 需要删除 我需要修复代码以消除警告 我不能只是隐藏警告 我的问题是 count 函数 这是我收到的警告及其所引用的一小段
  • 我可以在调试时仅“跳过”jQuery 代码吗?

    在单步执行使用 jQuery 的脚本时 我just想要测试代码I wrote 我不想进入 jQuery 文件 我不是在调试 jQuery 只是在调试我自己的文件 有什么方法可以告诉调试器不要进入 jQuery 文件吗 我使用 Visual
  • Windows 10 - 任务计划程序 - 未运行 (0x41303)

    我正在尝试在 Windows 10 中安排一项任务 在 登录时 事件中启动多个程序 但在多次尝试 错误后它不会运行 任务配置如下 常规 无论用户是否登录都运行 它提示凭据输入框 也尝试仅在用户登录时运行 以最高权限运行 在尝试过的情况下配置
  • 如何在当前Vue实例上添加方法或数据?

    我是新来的Vue js我正在摆弄它 有没有办法创建可重用的方法和数据 这是我想要实现的非常简单的代码 第1页 html div div
  • 从 Assembly.GetTypes() 获取的类型的排序

    我有一个要求 我需要获取以下类型 public class Class1 public class Class2 Class1 public class Class3 Class1 我可以致电Assembly GetTypes 在目标程序集
  • IGrouping 不包含以下定义

    我一直在这里查看其他线程以了解如何在 linq 中执行 GroupBy 我遵循对其他人有效的精确语法 但是它不起作用 这是查询 var results from p in pending group p by p ContactID int
  • 如何手动将 .dump() 文件的输出解析为文本小部件

    我如何手动将 dump 的输出从包含斜体和粗体文本的文本小部件解析到不同的文本小部件以将其及其文本格式加载 这是代码 如果有帮助的话 文本应该与文本格式一起保存 但是当文件打开时 文本格式消失了 from tkinter import fr
  • OutputCache 属性和 jQuery Ajax 不缓存

    我有一个像这样的简单 MVC3 控制器操作 HttpGet OutputCache Duration 1200 Location System Web UI OutputCacheLocation Server public string
  • C#:有关套接字编程(同步或异步)的问题

    我正在用 C 编写一个即时消息服务器用于学习目的 我的问题是我应该使用同步还是异步套接字来处理 IM 客户端 目标是处理尽可能多的客户 我不太确定 但据我所知 异步套接字的数据包不会按顺序到达 这意味着当您发送 2 条聊天消息并且存在延迟
  • 伊莎贝尔证明加法的交换律

    我试图证明 Isabelle HOL 中自定义的交换律add功能 我设法证明了关联性 但我坚持这一点 的定义add fun add nat nat nat where add 0 n n add Suc m n Suc add m n 关联
  • GORM 使用 hasMany 映射同一类的两个属性

    我有以下内容 class Match Team localTeam Team visitingTeam class Team static hasMany matches Match 抛出 加载插件管理器时出错 类 class myapp
  • 如何以编程方式/使用注释将代码节的语法突出显示设置为特定语言?

    我有一个 Laravel Blade 模板 blade php 其中包含纯 JavaScript 作为部分 稍后将其插入到通用包装器中 所以这个例子是 div Some HTML content div section js var a b
  • Android 广播到特定的第三方应用程序

    我开发了一个 Android 应用程序 它发送具有自定义权限的广播 public abstract void sendBroadcast Intent intent String receiverPermission 现在 任何具有广播接收
  • 在fortran中解析输入文件

    这是我前辈的延续thread https stackoverflow com questions 21409601 reading input file in fortran 我有一个来自不同代码的文件 我应该parse用作我的输入 其中的
  • 在mysql中选择不同的列字段和总和

    我有下表 topic id unique forum id forum views 1002 1885 5 1003 1893 2 1004 1885 3 1005 1892 6 我怎样才能得到这样的输出 具有上表中论坛总浏览量的唯一for
  • 计算一行中 NULL 的数量

    有没有办法获取指示行中 NULL 字段数量的列 这将在 SELECT 语句中 例如 Field1 Field2 Num Null NULL A 1 更新 我想要这个查询 这样我就可以根据给定书籍的附属销售数量进行排序 因此 无论是哪一个 拥
  • 函数声明语法:函数名前括号内的内容

    很抱歉我无法在问题标题中提供更具体的信息 但我正在阅读一些内容Go https golang org 代码和我遇到了这种形式的函数声明 func h handler ServeHTTP w http ResponseWriter r htt
  • 如何实现浮动在内容视图上的覆盖按钮

    in some iPhone apps i saw a button which was floating over the content view eg in the app EyeEm When the user is scrolli
  • 使用 MSAL 身份验证令牌使用 Web API 2

    我有一个 ASP Net Web API 2 我在其中实现了以下安全性 https learn microsoft com en us azure active directory develop active directory devq