问题标签 [microsoft-identity-web]

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.

0 投票
1 回答
77 浏览

asp.net-core - ASP.NET Core 中的多重身份验证

我的项目的身份验证(Cookie)设置如下,

我在不同的项目中配置了第二个身份验证选项(OpenIdConnect),如下所示,

现在,我需要将它们组合起来以在我的应用程序中支持多种身份验证类型。我怎样才能做到这一点?

0 投票
0 回答
24 浏览

microsoft-identity-web - 使用别名时,有什么方法可以指定重定向 URL

我的网站 (.NET Core 3.1) 使用公司政策规定的别名来向外界隐藏内部服务器地址。但正因为如此,登录失败,因为身份代码正在获取真实的服务器名称并将其作为回调路径/回复地址发送。我已经尝试覆盖 ProtocolMessage.RedirectUri 地址,如此处建议的Microsoft Identity Web: Change Redirect Uri,这让我更接近,但由于发送的地址与收到的地址不匹配,在最后一分钟仍然抛出异常.

MsalServiceException:配置问题正在阻止身份验证 - 请检查来自服务器的错误消息以获取详细信息。您可以在应用程序注册门户中修改配置。有关详细信息,请参阅https://aka.ms/msal-net-invalid-client。原始异常:AADSTS500112:回复地址“https://XXX/signin-oidc”与请求授权码时提供的回复地址“https://YYY/signin-oidc”不匹配。

有没有办法处理这个?

0 投票
0 回答
36 浏览

asp.net-core-webapi - 添加多个身份验证方案后 AddDownstreamWebApi 失败

问题:我作为应用程序调用下游 Web api 在添加我自己的 jwt 不记名身份验证后引发空异常错误。

我有一个 .net 5 Web API,称之为 AppAPI,其 ConfigureServices 具有以下代码:

我有一个 /auth 端点,它接受来自 Azure AD 的访问令牌,并基于数据库使用我自己的自定义声明生成一个新的访问令牌。控制器使用授权属性来确保它使用正确的机制:

上面的默认策略确保其余端点对未指定方案的每个其他端点使用此访问令牌。

我有第二个 Web API,称为 CommonServices,只能从其他 API 访问,不能直接从客户端访问。所以 AppAPI 使用 AddDownstreamwebapi 来处理这些调用。这对我之前添加我自己的应用程序访问令牌有效,这意味着我只有一种身份验证机制 - AddMicrosoftIdentityWebApi。当我添加自己的 JwtBearer 身份验证 - “AccessToken”时,我开始收到错误消息。

有错误的控制器注入 IDownstreamWebApi commonServicesApi。它使用“AccessToken”的默认身份验证方案。代码如下所示:

第二个参数“AzureAd”是我尝试让 commonservicesApi 使用正确的方案。我什至不确定这是否是正确的方案,或者 .EnbleTokenAcquisitionToCallDownstreamApi 是否添加了应该指定的第三种方案。

我接到的就是这个电话

我似乎无法弄清楚什么是空的,或者如何解决这个问题。

0 投票
0 回答
22 浏览

asp.net-mvc - ClaimsPrincipal 的 BootstrapContext 为空

我正在使用 .NET 框架构建一个 ASP.NET MVC 应用程序。

在我Get()的控制器中,我调用

但我看到它BootstrapContext为空,但ClaimsPrincipal.Current.Identities已填充。

在 ClaimsIdentity 上读到 BootstrapContext 为空。在我的Startup.cs,我添加了SaveSigninToken = true

BootstrapContext仍然为空。

我尝试添加

Views/Web.config我得到一个错误

无法识别的配置部分 system.identityModel

0 投票
1 回答
75 浏览

asp.net-core - Microsoft.Identity.Web OnTokenValidated 事件似乎不能很好地与异步配合使用

我一直在努力解决我附加到 OnTokenValidated 的 Func 没有做它应该做的事情。

经过大量尝试不同的事情:

按预期工作,并将值为“Bar”的声明“Foo”添加到标识中。

但是,一旦我在代码中等待任务并使 func 异步,则不会将附加声明添加到已登录的身份中:

不起作用。需要明确的是,它不会出错,但是在方法完成后,身份上不存在附加声明......

据我所知,通过消除各种事物,等待它打破的是等待,但 OnTokenValidated 的定义是:

所以似乎期望处理程序是异步的?


更新:2022-02-07 更进一步:

由于抛出异常导致登录失败,而

不起作用 - 抛出的异常不会影响登录,尽管抛出了异常,用户仍能正确登录。看起来好像代码执行已经继续,好像堆栈中的某个地方没有等待......但是查看github上的代码我找不到堆栈中的异步方法没有等待的任何地方


更新 2022-02-09 示例: https ://github.com/VaticanUK/msal_so_fail_example

我采用了官方 MS 示例之一(可在此处获得:https ://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2 )并在 Startup.cs 中添加了 MicrosoftIdentityOptions 的自定义:(https ://github.com/VaticanUK/msal_so_fail_example/blob/master/Startup.cs#L40)使用文档中显示的模式:https ://github.com/AzureAD/microsoft-identity-web/wiki/customization#customization -in-the-startupcs

要运行该示例,您需要在 Azure 中创建一个应用并在 appsettings.json 中设置您的客户端 ID。

照原样,该示例将起作用,我的意思是登录将失败(因为没有 async 关键字):

抛出异常,登录中止

如果添加 async 关键字,异常不会阻止登录: 抛出异常,但登录成功

0 投票
1 回答
30 浏览

asp.net-web-api2 - 使用 Microsoft.Identity.platform 保护 api 时从自定义 Api 获取 401

我正在关注 Microsfot.document 中关于如何使用 Azure AD (Microsoft Identity) 保护 api 的教程。

我采取的步骤如下:对不起,我试图提供可能有用但太多的信息,大多数时间贡献者要求截图或代码。

我关注了几个文档和视频教程,但这里是其中之一的链接: https ://docs.microsoft.com/en-us/learn/modules/identity-secure-custom-api/2-secure-api-microsoft -身份

WebAPI。

  1. 使用核心 5 创建了一个 webapi。在 Azure AD 中注册它。
  2. 创建单一范围“检查”并允许用户和管理员权限。

Webapp Created webapp using .net(classic) 注意 webapi 是 core 5。

  1. 创建了一个 webapp 并在 Azure AD 中注册它。
  2. 设置身份验证并创建 OnAuthorizationCodeReceived 以获取访问令牌以调用 api。

配置: 1.从 Azure AD->Webapi 注册-> 选择的应用程序(上面创建的 Web 应用程序)并授予范围权限。

在此处输入图像描述 2.对于Azure AD->Webapp注册->访问权限->委托->选择范围。 在此处输入图像描述

测试: 1.运行测试。在此刻; 我在调用的 api 方法上没有 [Authorization]。2、Webapp成功获取到api返回的字符串。在某种程度上,我认为管道是正确的。

  1. 在 app 方法上添加了 [Authorize] 过滤器。
  2. 结果 401 未经授权。

我已经检查了多次,查看了多个教程并重写了我的代码,观看了几个视频并更新了我的代码,但我总是收到 401 错误。

下面是代码;API 控制器:

api启动:公共类启动{公共启动(IConfiguration配置){配置=配置;}

Api 应用设置:

},

Webapp 启动:仅添加启动页面,因为首先我正在 OnAuthorizationCodeReceived 中获取一些用于测试目的的数据。

0 投票
1 回答
42 浏览

asp.net-core - ASP.NET Core - Azure Active Directory 身份验证 - 无法从以下位置获取配置:'System.String'

我有一个 .NET Core 2.2 / Angular 10 应用程序,我想在其中实现 Azure AD 登录。该应用程序已经使用 JWT 进行了简单的用户/密码登录:

现在我尝试添加这个:

我尝试了几种变体,例如以不同格式对权限等进行硬编码。我进入登录页面,可以使用默认用户/密码身份验证登录,但之后每个页面都只显示这个 500 错误:

在此处输入图像描述

即使在我注释掉所有新配置之后。当我删除 AzureAD 身份验证方案时,它再次正常工作。有什么建议么?

当然,我注册了应用程序并使用了 Azure AD 页面中的信息。

此外,在尝试此操作时:

它说:

严重性代码描述项目文件行抑制状态错误 CS1061“AuthenticationBuilder”不包含“AddMicrosoftIdentityWebApp”的定义,并且找不到接受“AuthenticationBuilder”类型的第一个参数的可访问扩展方法“AddMicrosoftIdentityWebApp”(您是否缺少 using 指令或程序集参考?) JI.Infopool.WebApp C:\Projekte\JI.Infopool - master\JI.Infopool.WebApp\Startup.cs 56 活动

虽然我已经包含了 NuGet 包 Microsoft.Identity.Web

0 投票
0 回答
3 浏览

asp.net-core - AzureAD/microsoft-identity-web 是否支持自动加载新证书版本?

microsoft-identity-web是否添加了对自动加载新证书版本的支持?一个请求已在此处发布到 GitHub ,但自 7 月以来一直没有被触及。

我们的问题与错误中概述的相同:

我们的解密证书轮换策略要求我们将新旧解密证书都加载到系统中,这样当我们上传新证书时,服务可以不间断地解密。目前,我们必须重新启动服务的所有实例才能达到此状态。

0 投票
0 回答
30 浏览

blazor-webassembly - 将 Microsoft.Identity.Web 添加到 .Net 6 Blazor Webassembly(独立)应用程序会导致错误

我尝试将包 Microsoft.Identity.Web 添加到 .NET 6 中的 Blazor Webassembly(独立)应用程序,但出现错误:

“没有可用于指定 RuntimeIdentifier browser-wasm 的 Microsoft.AspNetCore.App 运行时包”

我查看了 Microsoft 文档,但没有找到与此包和 .NET 6 相关的任何内容。

这个包不兼容.NET 6 版本中的这种类型的项目吗?

包错误

谢谢!!!

0 投票
1 回答
48 浏览

.net - 使用 Microsoft.Identity.Web 从 AzureAD 验证 JWT 成功,但随后在同一调用中失败

我有一个需要使用 AzureAD 保护的 API,以便它可以使用 SSO。

API 有一个 Swagger UI,所以我有(在阅读了很多很多教程/解释/问题之后):

  • 在 Azure 中创建应用注册
  • 为我的 API 创建了一个范围
  • 将我的范围添加为 API 权限
  • 将清单中的“accessTokenAcceptedVersion”更改为 2
  • 设置 Swagger 以使用具有适当配置和值的 OAuth2 流
  • 使用 Microsoft.Identity.Web 设置 API 并添加配置以允许登录到单个租户

根据:https ://github.com/AzureAD/microsoft-identity-web/wiki/web-apis,API中的设置如下:

appsettings.json:

我现在大摇大摆地拥有授权按钮。

当我单击按钮时,我得到一个对话框:

Swagger 身份验证对话框

输入客户端ID,选择范围并单击授权。Azure AD 登录窗口在新选项卡中打开,输入凭据并提交,然后我们被重定向回 swagger,我们被授权:

授权

到现在为止还挺好。

然后我尝试调用 API 本身,但失败并显示 401。

检查请求,我可以看到 JWT 令牌作为不记名令牌传递。

所以我在 JwtBearerMiddlewareDiagnostics 中设置了一些断点来尝试找出问题所在。

以下事件按以下顺序触发:

  • OnMessageReceivedAsync
  • OnTokenValidatedAsync- 与IsAuthenticated:真
  • OnChallengeAysnc- 带有IsAuthenticated:false 和AuthenticationFailure:null

作为比较,如果我让 JWT 过期,我会得到:

  • OnMessageReceivedAsync
  • OnAuthenticationFailedAsync- 与IsAuthenticated:假
  • OnChallengeAsync- 带有IsAuthenticated:false 和AuthenticationFailure:“关于令牌过期的一些消息”

因此,我正在努力解决的问题是,当我的 JWT 有效时,OnTokenValidatedAsync 会触发并显示有效的 UserPrinciple,其中 Identity 表明用户已通过验证。但几乎在此之后,会立即触发身份验证挑战,其中 UserPrinciple 显示用户经过验证......然后由于我没有处理 OnChallengeAsync 事件,因此返回 401。我的理解是,如果没有有效令牌(在 JWT 流中),则会调用 OnChallengeAsync,但调用 OnTokenValidatedAsync 表明令牌已正确传递并且用户有效?!

此外,当我遇到“有效失败”(令牌已过期)时,传递给的上下文OnChallengeAsync清楚地显示了AuthenticationFailure属性中的原因,但是当OnChallengeAsync我(据我所知)好的令牌触发时,AuthenticationFailure为空......