使用 Azure AD 和 WebAPI 进行服务到服务身份验证

2024-01-30

我创建了一个 .NET core Web 应用程序,它使用 Azure AD 作为身份。这一切都按预期正常工作,并且我使用 [Authorize] 装饰的任何内容都受到保护。

我现在想要确保我的一个 API 控制器能够从外部服务访问。

我遵循了本教程,该教程解释了服务-服务身份验证。

使用 Azure AD 进行服务到服务身份验证 https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-service-to-service

使用这个我成功地请求了一个令牌

POST https://login.microsoftonline.com/{TENANTID}/oauth2/token
grant_type=client_credentials
&client_id={CLIENTID}
&client_secret={CLIENTSECRET}
&resource=https%3A%2F%mydirectory.onmicrosoft.com/myappname

使用邮递员运行此操作,我得到了不记名 access_token,所以看起来不错。

现在,如果我在 Postman 中调用我的 Web 应用程序,并在标题上使用此不记名令牌,

GET https://localhost:44392/api/booking
Authorization Bearer {access_token}

我从 Microsoft 对话中收到 HTML 响应。所以看起来它只是进入重定向循环,所以我现在很困惑我是否在令牌请求中存在配置问题,或者我的网络应用程序是否需要以不同的方式设置。这里的文章提到了有关清单文件中的权限的一些内容,但我很困惑为什么这是必要的?

在此输入链接描述 http://bitoftech.net/2014/09/12/secure-asp-net-web-api-2-azure-active-directory-owin-middleware-adal/

一些补充要点

  • 我的 Web 应用程序和令牌的 POST 使用相同的 AD ClientID
  • 我为每个功能(Web 和服务到服务)尝试了不同的 AD 应用程序,但似乎没有任何区别
  • 如果我只是在浏览器上执行标准登录,API 端点将按预期解析。

任何帮助表示赞赏!

Updates:

我设法尝试 Daemon .NET 4.5 应用程序,并且使用 UseWindowsAzureActiveDirectoryBearerToken 完美运行

.NET 4.5 上的守护进程服务到服务身份验证 https://github.com/Azure-Samples/active-directory-dotnet-daemon

但是,在我的 .NET Core 应用程序中,此中间件不可用,因此我尝试使用 JwtBearer 中间件,但仍然收到登录提示。

app.UseJwtBearerAuthentication(new JwtBearerOptions
            {
                Audience = "https://localhost:44392",
                Authority = "https://login.microsoftonline.com/{TENANTNAME}.onmicrosoft.com"
            });

正如您所看到的,我只在 BearerOptions 中设置了 2 个属性,但我相信它们应该足以[授权]我的 API 端点。


POST https://login.microsoftonline.com/ https://login.microsoftonline.com/{CLIENTID}/oauth2/令牌

首先获取token时token点不正确,我们应该使用tenantId代替clientId.

要解决此问题,我建议您从以下位置解码 access_token这个网站 https://jwt.io/看看是否aud令牌中的声明与Audience您在 Web API 项目中进行配置。

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

使用 Azure AD 和 WebAPI 进行服务到服务身份验证 的相关文章

  • 在 Windows 服务中调用 Web 服务

    我使用了一个简单的 Windows 服务来使一个方法在特定时间运行并且运行良好 接下来我已经尝试过 protected override void OnStart string args this WriteToFile Simple Se
  • AjaxControlToolkit:引发上传完成事件并开始新上传时出错

    当使用 2013 年 4 月的 AjaxControlToolkit 时 我收到错误 0x800a139e JavaScript 运行时错误 引发上传完成事件并开始新上传时出错 尝试使用 AjaxFileUpload 控件上传文件时 确保
  • 适用于 Web 和移动设备的 ASP.NET Web API 社交身份验证

    我的问题有点复杂 所以请耐心等待我 因为我试图很好地阐明我正在努力解决的问题 Goal 拥有一个 ASP NET 网站 允许用户通过用户名 密码或也具有 API 的社交网站 Facebook Twitter Google 等 注册和登录 该
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • 部分 ASP.NET MVC 视图提交

    我是 ASP NET MVC 的新手 所以这个问题可能显得 愚蠢 抱歉 我的主视图中有一个部分视图 部分视图提交一个表单 调用 HomeController 内的操作方法 它与服务器验证配合得很好 问题是在发布后仅呈现部分视图 发布后如何呈
  • 比较 2 个 linq 应用程序:意外结果

    我起草了2 ASP NET应用程序 using LINQ 一个连接到微软SQL服务器 另一个对某些专有内存结构 这两个应用程序都可以使用以下表格3 个 int 字段 有500 000 条记录 内存结构与 SQL Server 表相同 使用的
  • 在 Asp.net MVC4 中访问 ViewBag 时出现 NullReferenceException

    我正在尝试访问ViewBag我认为的数据如下 span class small ViewBag BreadCrumb span 我正在发送那个ViewBag来自代码的数据 例如 ViewBag BreadCrumb topic Catego
  • 在 MS word .docs 中插入 MathMl 、 Tex 或 LaTex 方程?

    我一直在寻找 C 中 Net 的一些 dll 用于在 MS Word 中插入任何 MathMl Tex 或 LaTex 方程 我尝试了一些类似 DocX 的工具 但它们失败了 你知道吗 或任何提示如何做到这一点 谢谢 Word 2007 可
  • SQL 选择与带有通配符的 URL 匹配的行

    我在数据库中有一个表 其中一列包含一个 URL 例如http example com users http example com users 轮廓 我得到了一个 URL 例如http example com users 234 profi
  • 如何防止用户生成的 Sql 查询上的 Sql 注入

    我有一个项目 私有的 ASP net 网站 受 https 密码保护 其中要求之一是用户能够输入直接查询数据库的 Sql 查询 我需要能够允许这些查询 同时防止它们对数据库本身造成损坏 以及访问或更新它们不应该访问 更新的数据 我制定了以下
  • 实体框架中对象属性中的 NULL 值

    Tables Article Author Comment 1篇文章和1位作者可以有 评论 数据库中有 1 篇文章 1 位作者和 1 条评论 问题是 该代码 myBD my bd new myBD var articles by bd Ar
  • include 内的 ASP.net 代码不执行

    我已经很长时间没有涉足服务器端了 但在我看来 嵌入在包含的代码文件中的脚本应该正常执行 由于某种原因 情况似乎并非如此 注意 下面显然是一个基于我的调试尝试的简化实现 实际上 我在实际项目中还得到了其他包含平面 HTML 和 JavaScr
  • 当前上下文中不存在名称“DefaultAuthenticationTypes”

    我正在尝试在我的 Web 应用程序中实现基于角色的授权 如下所示 HttpPost ActionName Login public ActionResult Login LoginViewModel model if ModelState
  • 为什么布尔变量总是重置为 false;

    我在类的顶部声明了一个布尔变量 当在页面上选择单选按钮时 该变量将设置为 true 但是当重新加载页面时 该变量将重置回 false 我处理这个问题的一种方法是使用 static 关键字 但我不确定这是否是处理这个问题的最佳方法 这是我尝试
  • 我们可以将哪些类型的对象放置在视图状态中?

    我想知道为什么我们必须设置可序列化属性才能将对象保存在视图状态 另外 我们可以在视图状态中存储哪种类型的对象 ViewState使用二进制序列化进行序列化对象状态格式化程序 http msdn microsoft com en us lib
  • Active Directory:如何确定帐户是否是服务帐户?

    问题 是否可以使用 C LDAP 确定帐户是否是 Active Directory 中的服务帐户 如果是 怎么办 Context 我有一个程序正在检索模式类类型 USER GROUP COMPUTER FOREIGN SECURITY PR
  • 如何在2.0构建的应用程序中使用WCF wsHttpBinding服务?

    WCF 服务正在使用 wsHttpBinding 绑定运行 将使用 WCF 服务的应用程序不符合 WCF 或者换句话说 它位于 Framework 2 0 之上 我无法在此应用程序中使用 ServiceModel 因为只有 3 5 支持 S
  • 扩展授权属性

    我实施了 CustomAuthorization 属性基于 Authorize 属性 我的属性如下所示 public class CustomAuthorizeAttribute AuthorizeAttribute public eUse
  • UserControl 中的 Web 控件为空?

    我构建了一个小型用户控件 它本质上是一个 DropDownList 其中包含一些基于目标属性设置的预设值 这是代码 public partial class Selector System Web UI UserControl public
  • 如何通过ConfigurationManager找到配置文件位置?

    如何通过ConfigurationManager找到配置文件位置 我在代码中有 ConfigurationManager 类 并且正在调试它 我想知道它指向哪个配置文件 web config 或 app config 等 Configura

随机推荐