问题标签 [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 投票
3 回答
1433 浏览

asp.net-core - EntityFramework Core 自动迁移

在我的项目中,我有 2 个数据库:一个是我的自定义数据库,另一个是ApplicationDbContextMicrosoft Identity我的。

在我的Startup.cs我有这个代码:

不知道什么时候有迁移迁移,对吧?然后,我有2个错误:

  • ApplicationDbContext除了第一次之外,每次应用程序启动时,迁移都会引发错误
  • 我的上下文的迁移似乎很好

使用的最佳做法是什么?是否有必要调用迁移ApplicationDbContext

更新

我已删除该Migration文件夹。然后,改了Startup.cslike

但是当应用程序启动时,它根本不会创建任何表。AuditDbContext是因为我使用Audit.net

更新#2

我尝试了另一种解决方案,但它不起作用。解决方案是使用RelationalDatabaseCreator如下代码

作为Migrate(),应用程序第一次运行时会创建表,但第二次会引发错误,因为表已经存在于数据库中。

0 投票
2 回答
194 浏览

c# - 管理员同意对话框请求不同的权限,然后请求

我正在开发托管在 azure 中的 asp.net core .net 5 Web 应用程序,我想为我们的客户提供 SSO 体验。

作为参考,我从https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/master/2-WebApp-graph-user/2-3-Multi -AAD管理员为 AAD 中的所有用户授予应用程序权限的租户。

该示例使用此处描述的管理员同意 URL:https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-admin-consent#request-the-permissions-from-a-目录管理员

就我而言,我只想让用户使用他们的公司帐户登录并在登录后阅读他们的电子邮件(没有其他个人资料数据)。所以我认为请求范围“openid”和“email”就足够了。但是我提供的范围值并不重要,呈现给管理员的对话框会显示其他权限请求(看起来像“profile”和“offline_access”(?)):

在此处输入图像描述

我建立这样的网址:

生成的请求如下所示: 在此处输入图像描述

有趣的是,如果管理员授予对应用程序的访问权限,并且如果我检查 AAD 中“企业应用程序”的权限,我会看到我最初想要的“电子邮件”和“openid”权限: 在此处输入图像描述

但这对于 AAD 管理员来说非常令人困惑,我真的想呈现一个与我的权限请求匹配的对话框。

0 投票
3 回答
1088 浏览

c# - Microsoft Identity Web:更改重定向 Uri

我正在使用 .net 5,Identity Web Ui 来访问 Microsoft Graph。我可以在哪里配置我的重定向 URI?

我需要指定完整的 Uri,因为从 callbackUri 生成的 Uri 不正确,因为它位于具有 SSL 卸载功能的负载均衡器后面。

这是我当前的 ConfigureServices 部分

0 投票
0 回答
67 浏览

azure - 我可以使用 Azure AAD OIDC API 和应用注册将声明 VALUE 硬编码到我的访问令牌中吗?

我有一个客户端凭据应用程序注册和一个自定义 API 注册。几乎与Microsoft.Identity.Web 示例相同。

使用我们的 IdentityServer4 客户端凭据客户端,我们可以轻松地添加foo=bar到我们的客户端。当它为受保护资源的范围请求访问令牌时(API,例如api://<AppId>/.default在 Azure-land 中),您将看到一个带有名为“foo”的声明和值为“bar”IE 的 JWT:{ "foo": "bar", "iss": "https://sts.windows.net/..."

这对我来说是 OAuth2 的重要组成部分,因为我们需要我们的 API 能够查看有关客户端的自定义信息。

0 投票
1 回答
268 浏览

azure - AuthorizeForScopesAttribute 的内联等效项

例如,我们有一个我们一直在开发的控制器,它使用控制器的 Microsoft.Identity.Web.AuthorizeForScopes 属性

直到现在,这一直运作良好。我们需要将这组 Web api 部署到生产环境中。api 将有一个新的 Azure AD 应用程序注册用于生产。这意味着我们需要在 Azure 门户的“公开 API”部分中“添加范围”。新的 Azure AD 应用程序有一个新的应用程序 ID URI(Azure 不允许它使用开发应用程序注册使用的那个)。

该应用程序 ID URI 构成范围字符串的一部分,因此如果我们的新应用程序 ID 是“https://ourdomain.co.uk/us.prod -theapi /”并且范围仍然是“访问”,那么代码中的属性将需要是“https://ourdomain.co.uk/us.prod-theapi/”,但这不利于开发。

有没有一种方法可以检查与 AuthorizeForScopes 属性获得的结果相似但不使用属性的范围?我们需要能够驱动配置属性使用的范围字符串

0 投票
1 回答
334 浏览

asp.net-core-mvc - Azure AD B2C 和 Microsoft Identity Web - 使用多个策略登录 (.net Core 3.1)

我有一个使用 .NET Core 3.1 MVC Web 应用程序的应用程序,它使用 Azure AD B2C 来登录用户,我刚刚将它迁移到使用 Microsoft Identity Web 库。

我们希望有两种不同的登录策略,一种用于普通用户(B2C_1A_SignUpOrSignIn),另一种用于管理员用户(B2C_1A_SignInAdmin)。因此,在 Appsettings 中,我们有以下格式:

在 Startup 类中,我刚刚添加了以下内容:

而且我还覆盖了“AzureController”,因此,对于普通用户,我使用从此处获得的相同方法Microsoft Identity Web - Account Controller “SignIn”。但是,对于管理员用户,我将该方法更改为使用类似于 PasswordReset 方法提供的方法,如下所示:

因此,如您所见,我为此方法使用了不同的策略名称。

一切似乎都正常,用户根据策略被重定向到正确的登录页面,并且令牌由 Azure 颁发,我们的应用程序在我们的方法中接受令牌

但是,不久之后,身份验证和方法出现问题

调用时出现以下异常“{”消息包含错误:'invalid_grant',error_description:'AADB2C90088:尚未为此端点发出提供的授权。实际值:B2C_1A_SignUpOrSignIn和预期值:B2C_1A_SignInAdmin ..."

所以,我的问题是,我必须做什么才能使用两种不同的策略登录?或者我应该做任何配置才能做到这一点?

提前谢谢你。

0 投票
0 回答
61 浏览

asp.net-core - ASP.Net Core Web App Reauthentication with Microsoft.Identity.Web

我有一个使用 Azure AD 登录用户的 asp.net 核心 Web 应用程序。由于某些用户经常共享计算机,因此他们可能无法登录/退出应用程序,这对于大多数操作来说都是可以的。但是,我现在需要强制用户在更新应用程序的某些区域(即输入临床信息)时重新输入密码。这是为了确保写入系统的敏感信息被标记在正确的用户名下,以用于审计目的。

为了测试此功能,我使用Microsoft 身份平台文档中的信息和示例创建了一个新的 asp.net core 5.0 Razor Web 应用程序。我遇到的问题是标准库(Microsoft.Identity.Web 和 Microsoft.Identity.Web.UI)似乎没有提供我能找到的这个功能。

我尝试在我的应用程序注册中添加 spa 重定向并使用 MSAL,但问题是在成功调用 loginPopup 并使用不同的用户帐户登录后,Razor 应用程序仍以旧用户身份进行身份验证。也许 Razor Web 应用程序不应与 SPA/MSAL 功能结合使用。

因此,我正在使用此处记录的方法。但是,我无法成功捕获对包含状态信息的 redirect_uri 的 POST 请求,因为服务器返回 302 响应并改为重定向到 /signin-oidc。在此之后,我指定的 redirect_uri 被加载,但作为 GET 请求,所以我的表单信息消失了。我需要此状态信息,以便我知道在成功完成重新身份验证后要执行什么操作。

如何使用带有 Microsoft.Identity.Web 库的 Razor Pages 或 MVC Web 应用程序重新进行身份验证?

应用注册 在此处输入图像描述

应用程序代码

网络请求(单击 ReAuth 按钮后) 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
324 浏览

c# - MSAL / ASP.NET Core - 如何检查令牌缓存内容?

在我的 ASP.Net Core Mvc 机密 Web 应用程序中,我正在使用带有 AAD 的 Microsoft Identity Web / Platform,我想将其称为下游 WebAPI。Web 应用 Startup.cs 如下:

当用户登录时,如果我理解正确,他们的访问令牌(在登录时获得,身份验证代码流也请求访问令牌)存储在 InMemoryTokenCache 中。

如何从 MVC 控制器访问已登录用户的令牌缓存?我可以通过ITokenAcquisitionand GetAccessTokenForUserAsync(提供范围)成功获取令牌,但我想检查缓存以确定令牌是否存在以及用户是否存在其他令牌。我试过var accounts = await app.GetAccountsAsync();了,但这总是空的。

0 投票
1 回答
63 浏览

asp.net-core - 向声明添加权限 - Microsoft.Identity.Web 和 B2C

我想就如何将自定义声明添加到用户身份的任何文章/文档寻求建议或指导。我正在进行的项目是使用 Azure B2C 和 Microsoft.Identity.Web。

我正在寻找一种在 Web 应用程序中的 Web 请求期间添加自定义声明的可靠方法。该声明将包含从应用程序数据库获得的权限。所以我还需要一种在请求之间存储该声明的方法,所以我不会在每个请求上都访问数据库。

存储在数据库中的角色和权限模型非常复杂和动态(由管理员管理),因此可以选择通过图形 API 在 B2C 中简单地存储自定义声明。

我正在考虑使用中间件进行声明转换:

  • Microsoft.Identity.Web 可以吗?还是我不应该这样做?

  • 仍然不确定如何在请求之间坚持声明 - 使用 Microsoft.Identity.Web 时是否有任何可靠的方法?

0 投票
0 回答
45 浏览

asp.net-core - 用于托管 Wasm Blazor 和经典 Web 应用程序的 Azure B2C SSO

是否可以将 SSO 与 B2C 一起用于以下场景?

  1. 对 B2C 租户(本地帐户)中的用户进行身份验证的 ASP.Net Core Web 应用程序(Razor Pages)。为简单起见,使用 Microsoft.Identity.Web:
  1. 托管 Blazor (wasm),客户端通过以下方式针对同一 B2C 租户进行身份验证:

身份验证适用于两个应用程序,但用户必须同时登录。

两个应用程序都使用相同的 B2C 用户流。只需在 Azure 门户中为用户流启用 SSO 选项不会改变任何内容,用户仍然必须手动登录这两个应用程序。

我不确定它是否可以简单地完成(隐式与授权流程),但我将不胜感激任何指导。非常感谢。