问题标签 [microsoft-identity-platform]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jwt - 令牌无效时受保护的网络调用
我使用 .NET Core 3
我使用 Azure AD 访问受保护的 Web API。最近我已经切换到出现问题的 Core 3.0(在 2.2 上它运行良好)。
目前,当我尝试使用无效令牌调用 web api 时,我进入
JwtBearerMiddlewareDiagnostics类方法
这是绝对正确的,因为令牌是无效的。但在那之后我的受保护控制器方法仍然调用(我通过添加带有 Bearer 和令牌的标头从邮递员调用它们)。这是我的控制器:
在 Startup.cs 中设置 AD 授权:
更新
jwt - 如何验证 Microsoft jwt id_token?
我正在使用从 Microsoft 到客户端的 jwt 令牌来验证从它到 Web API(服务器)的请求。我可以控制客户端(js)和服务器(Python)的代码。
在客户端,我使用以下请求获取令牌(用户通过租户上的密码/2FA 声明):
这里guid
有一个独特的价值,TENANT_ID
是租户,CLIENT_ID
也是客户。
获得此令牌后,我将其作为授权标头发送,如下所示:
然后在服务器上检索令牌并验证它:
jwk
的内容在哪里https://login.microsoftonline.com/{TENANT_ID}/discovery/v2.0/keys
。
整个流程一直有效,直到验证失败,并出现以下错误:
这表明令牌的标头包含一个密钥nonce
(我验证了它)。
在此处查看Microsoft 的文档,标头上没有对 anonce
的引用——只是在有效负载上。
Q1:我在这里做错了什么?
Q2:假设微软是把 nonce 放在错误的地方(头而不是有效负载)的人,是否可以在将 nonce 传递给 jose 的身份验证库之前从头(在服务器端)中删除它?这样做安全吗?
asp.net-core - 允许切换帐户提示
我对 Azure AD 世界的身份验证和授权非常陌生。
我正在编写一些 POC 代码来验证内部 Web 应用程序。web app的用户共享机器,登录windows的AD账号是“机器”账号。
当前的“身份验证”过程允许用户扫描其 ID 徽章背面的条形码,并对“凭证”进行数据库查找。
我想保留一些这种集成,但也使用 Windows 身份平台(以前为开发人员使用的 Azure AD)。
我正在寻找一种方法来提示用户在操作应用程序之前扫描他们的徽章,如果扫描的徽章不是当前登录用户持有的徽章,则提示“切换帐户”体验。如果用户已经登录,则用户可以从那里选择自己的帐户,或者如果他们的帐户未显示在列表中,则可以登录。
如何提示这种“切换账号”体验?
c# - 无法在 MVC 应用程序中使用 Microsoft 身份平台授权用户,我正在获取 cookie 但它没有返回用户信息
这是单击登录按钮时调用的函数
我的重定向 URL 是http://localhost/Home/OfficeLogin
到目前为止,这一直运作良好,但本周突然停止运作。
当我用它装饰任何控制器时,[Authorize]
它只会一次又一次地回到 Office 365 登录页面
使用我的 O365 帐户登录后,我每次都会收到一个 cookie,如下所示
但它没有返回任何用户信息,如姓名/电子邮件等,并且 request.IsAuthorized 仍然是错误的
.net - .NET Core 在 AzuerAD 身份验证后添加声明
我的应用程序通过 AzureAD 登录,但现在我需要从数据库中获取信息,然后将角色存储为声明。
所以我的问题是:身份验证后如何将角色存储为声明?
这是我尝试过的:
但是当我去另一个控制器时,索赔不存在了?
谢谢
azure-active-directory - 两个 AAD 应用程序之间的通信:错误 AADSTS65001
我收到错误消息:“AADSTS65001:用户或管理员未同意使用 ID 的应用程序......。
我们在 azure 上有 2 个应用注册,比如说应用 A 和应用 B。我试图从 A 获取一些数据到 B。
在 azure 门户中,我已经配置了权限,因此 B 应用程序可以访问应用程序 A,并且它的状态已授予。
我正在使用 msal-angular 库对用户进行身份验证并实现这一目标。这是我的配置:
所以第一件事就是登录app B,认证成功,收到token并存入本地存储。第二件事是向应用程序 A 发出 http 请求以获取一些数据。调用http时会弹出错误。
请帮忙!
reactjs - 使用 react-aad-msal 获取两个不同资源和范围的访问令牌
开发了一个React应用程序,它需要使用访问令牌调用两个不同的 API。应用程序的代码使用react-aad-msal库进行身份验证。最初,该应用程序已构建为仅调用一个 API,在该 API 中,我请求了必要的访问令牌,其工作原理类似于魅力。
根据有关使用权限的Microsoft 文档,其中指出:
访问令牌只能用于单个资源,但在访问令牌中编码的是您的应用已授予该资源的所有权限。
基于此,我需要请求两个不同的访问令牌,因为资源不同,这很清楚。
只有一种资源和范围的工作解决方案:
<AzureAD>
为包装器创建必要的提供程序:
然后将其传递给<AzureAD>
包装器:
这里没有问题。
问题:
所以我有点困惑如果我需要来自不同资源和范围的两个访问令牌,我应该如何处理这种情况。
一旦我尝试将其他资源和范围添加到范围数组,如下所示:
它显然给出了以下错误消息:
AADSTS28000:为输入参数范围提供的值无效,因为它包含多个资源。
对以下内容感兴趣:
- 我应该如何正确获取其他访问令牌以发送到其他 API?
- 用户不应该被重定向两次到登录页面吗?
- 这种情况可以在一个请求中以某种方式处理吗?
任何澄清或想法表示赞赏,谢谢!
electron - 使用系统浏览器重定向到电子后,是否可以关闭 Azure AD B2C 的登录窗口?
现在的情况
我们构建了一个使用受 Azure AD B2C 保护的 Web API 的 Electron 应用程序。身份验证过程如下:
- 用户想登录
- Electron 准备初始 OIDC 请求(包含 oidc 范围的返回类型代码)
b2clogin.com
Electron(主线程)使用正确的租户打开系统浏览器- 用户输入凭据并在成功时重定向(使用自定义协议,例如
my-awesome-app://
) - Electron 应用程序处理重定向(新实例处理,URL 解析,一切正常)
- 正确解析的信息用于调度最后一个身份验证请求(再次在主进程上)
- 应用程序收到身份验证令牌并且用户已登录
所有这些都可以在不需要嵌入式 Web 视图和处理 localhost 重定向的本地 Web 服务器的情况下工作。至少在我的理解中,我们应该坚持在本机应用程序中使用 OIDC 的最新技术。
问题
上述过程运行良好 - 它只有一个警告:用户输入其凭据的浏览器窗口保持打开状态。据我所知,这是因为浏览器尽职尽责地重定向但从不知道它成功了(即使重定向是由操作系统处理的,浏览器的网络监视器也会显示失败)。
据我检查 GitHub 桌面应用程序、Slack 桌面应用程序以及 Brock Allen 的这个.NET 控制台应用程序示例所知道的,这种行为是可以预料的。Azure AD B2C 的主要问题是身份提供者永远不会离开持有输入凭据的登录表单。
据我所知(我在 Google 和 Microsoft Docs 上花了很多时间)没有明显的方法可以改变这种行为。这些应用程序使用的 IDP 导航到另一个页面,并在登录成功时显示关闭选项卡的消息。我试图在 MSAL 文档中寻找指导——因为它是微软自己的这个用例的库——但他们似乎根本没有考虑自定义协议(显然UWP 甚至不鼓励使用系统浏览器) .
在 Microsoft 实习期间曾尝试为 Electron 提供 MSAL 体验,但这些努力似乎已被放弃。它还会在我们积极尝试避免的同一过程中使用新的电子浏览器窗口。
据我所知,目前“你能得到的最好的东西”是让 IDP 导航到一个窗口,如果用户忘记关闭它,该窗口不能用于提取凭据。
这引出了我的主要问题:是否有可能使用 Azure AD B2C 实现这种行为,还是我们被迫退回到“嵌入式 Web 视图”体验?
oauth-2.0 - 如何使用 MailKit 中的 OAuth 2.0 连接到 Exchange Online?
我有一个 Web 应用程序,它使用 MailKit 和基本身份验证通过 Exchange Online (Office365) 向用户发送电子邮件。我们公司是 MS 合作伙伴,因此有义务在 2020 年 2 月底之前为我们的服务关闭基本身份验证。
因此,我想使用 OAuth 2.0 连接到 Exchange Online,类似于此示例。事实上,根据这个答案可能有一个可用的解决方案,但我找不到任何关于它的东西。
现在我正在玩 MS Identity Platform v2.0,但我不知道该怎么做。
任何帮助都将不胜感激。
更新 1
我不想代表已登录的用户发送邮件,而是有一个 Office365 用户帐户可用于向其他人发送邮件(通知等)。
更新 2
我设法使用 Microsoft Graph SDK 和Username/Password Provider更接近我想要做的事情。
我们的用户帐户需要多因素身份验证,因此在使用用户密码时出现错误,因为我无法满足第二个因素。当我使用应用程序密码时,由于密码不正确,身份验证失败。
更新 3
我现在切换到邮件中继。但如果我能找到答案,我会更新这个问题。
azure - 为需要同意步骤的第二个 API 请求访问令牌
目前正在开发具有不同 API 调用的React SPA。我最终拥有了一个用户体验 API ,它使用UX API从oauth2/v2.0/token
端点请求的访问令牌在后台处理对其他 API 的不同调用。该应用程序正在使用以下文章中解释的OBO(代表)流:
Microsoft 身份平台和 OAuth 2.0 On-Behalf-Of 流。
我在Azure中托管的 Web 应用程序具有以下简化架构:
代码和问题:
因此,在UX API(这是一个Azure Function v2.0)中,我正在尝试获取其他Data 2 API的正确访问令牌(参见上面的体系结构),基于上述 Microsoft 文档中解释的步骤。
解释场景:
- 首先用户打开应用程序,然后它需要同意UX API的授权,
- 然后在成功登录访问令牌到达可用于调用UX API,
- 在为Data 2 API请求访问令牌的UX API中- 请参阅下面的代码实现,
- 响应到达用户需要同意Data 2 API授权的地方。
请参阅下面的代码实现,它似乎工作正常:
在后台引发以下异常:
AADSTS65001:用户或管理员未同意使用 ID
'<app-client-id>'
名为的应用程序'<app-name>'
。为此用户和资源发送交互式授权请求。
问题:
当然,我正在处理StackOverflow中解释的类似问题,但我想这个问题与他们不同。他们只谈论一层场景,并且正在解释错误消息的含义,看起来很清楚。
所以我的问题是我应该如何处理这种情况?我的猜测可能是错误的:
- 不应该在应用程序的配置中以某种方式处理,如果有效的访问令牌来自UX API,那么不需要进一步的同意?
- 将交互窗口发送回用户以同意Data 2 API的授权,这不会为最终用户带来出色的 UX。
- 以某种方式从代表更改整个授权流程?
不确定,我感谢任何帮助!