问题标签 [claims-authentication]

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 回答
88 浏览

asp.net - 基于声明的授权以及在何处添加用户可以执行的操作

我刚刚使用基于声明的授权实现了一个 web api。用户可以登录系统,然后根据用户可以执行的操作从数据库中提取一组声明并添加到 httpContext.User.Identity。

在 Startup.cs 中注册策略后,使用以下内容:

我可以在要授权的控制器方法上使用 Authorize 属性,例如:

这工作正常,但今天我更彻底地阅读了微软文档,我在基于声明的授权文档中遇到了这个声明:

声明是一个名称值对,表示主题是什么,而不是主题可以做什么

目前,我正在做 microsfot 建议不要做的事情。我正在将用户可以执行的操作(权限)添加到 identity 中。所以,这让我想,我做错了吗?如果答案是肯定的,您将在哪里存储用户权限以及授权如何工作?

0 投票
1 回答
578 浏览

authentication - 通过使用数据库中的数据更新声明进行授权(Blazor WebAssembly ASP.NET Core 托管)

我有一个关于使用托管的 Blazor WebAssembly ASP.NET Core 在我的 Web 应用程序中进行身份验证的问题。使用的数据库是 Azure SQL。

我想避免在数据库中存储密码,因此用户仅限于拥有 Microsoft 帐户(与项目相关)。

截至目前,用户使用 Azure AD 作为第三方身份验证提供程序登录。当重定向回 Web 应用程序时,会使用仅包含来自 Azure 的电子邮件的声明创建用户。用户被定向到注册页面,其中电子邮件输入设置为当前用户声明电子邮件。当用户单击注册按钮时,提供的信息现在存储在数据库中。

问题是我现在在数据库中有一个用户,但声明仍然只是电子邮件。我希望能够AuthorizeView role在不同页面上使用标签,因此想知道是否可以使用用户在注册页面中指定的角色来更新声明?该数据此时仅存储在数据库中。

如果这是一种不好的做法,还有其他类似的方法可以使这项工作吗?

0 投票
0 回答
236 浏览

c# - C# JWT 令牌在更新后仍然存在声明?

我想使用HttpContext.User实例更新用户的声明,但在更新声明后,它们只停留在当前请求的范围内。我还需要让它为即将到来的请求持续存在,请帮我解决这个问题。

请在下面找到我的代码。在POST我更新声明的方法中,下一次GET点击该方法时,我试图获取更新的值,但我得到了旧值。

0 投票
1 回答
390 浏览

sharepoint - SharePoint 使用客户端证书为没有 Active Directory 帐户的用户声明身份验证

我正在尝试为没有 Active Directory 帐户的用户使用 SharePoint 2019(本地)进行客户端证书声明身份验证。

内部用户已经通过映射到 AD 用户的表单身份验证向 SharePoint 进行身份验证,并且他们的声明流向 SharePoint。但是现在会有很多外部用户拥有客户端证书(X.509),但没有 AD 帐户可以映射。

我已经配置了 IIS 设置,因此 SharePoint 要求提供客户端证书并尝试使用所选的证书进行身份验证,但这就是我碰壁的地方。

我认为该解决方案将涉及一些自定义 .NET 代码,这些代码通过检查一些证书值来验证客户端证书,并且链中最顶层的根证书与指纹或颁发者的预期相匹配。

验证客户端证书后,我可以映射到通用 AD 用户(想想 HR 部门或会计部门),然后以某种方式将一些声明和身份验证内容推送到 SharePoint。

我正在使用 SharePoint 声明查看器 Web 部件查看当前用户的声明,一旦通过身份验证就可以知道声明的来源和价值,因此我应该能够在完成后将表单身份验证登录与客户端证书登录进行比较.

我的问题是:

  1. 这个解决方案概念是正确的方法吗?如果没有,有什么更好的方法来考虑这个问题?
  2. 如何构建自定义身份验证代码(是成员资格提供程序、自定义 STS、自定义声明提供程序)?是否有用于 SharePoint 期望调用的接口和事件的 SharePoint 2019 模板?
  3. 如何将自定义身份验证代码部署到 SharePoint?
0 投票
1 回答
3140 浏览

azure-active-directory - ID 令牌中缺少特定于 Azure AD v2.0 的可选声明

我正在尝试使用 Microsoft Identity Web - NuGet 添加可选声明以在 NET Core 3.1 WebApp 中进行用户身份验证。阅读 MS Docs,似乎唯一需要的步骤是在 Azure 的应用注册清单文件中声明可选声明。但是,当使用两个不同的应用程序(我自己的代码和一个 MS 项目示例)测试登录过程时,在成功登录后从 Azure 返回时,似乎没有将可选声明添加到 ID 令牌中,即它们根本不存在在调试中查看令牌详细信息时。

我不确定如何诊断此问题以及在何处跟踪问题,即我是否缺少 Azure 设置中的任何必需步骤?

旁注:只是为了确认它是我想要接收附加声明的 jwt ID 令牌,而不是用于调用图形或其他 Web API 端点的 jwt 访问令牌。

MS Docs 参考:v2.0 特定的可选声明集

下面是 Manifest 文件的摘录:(请注意,我什至声明了“accessTokenAcceptedVersion”:2,因为我使用的可选声明在 ver.1 中不可用,如果上述内容保留为默认值“null”值,则 Azure 将假定我们使用的是旧版 1 - 一个可能的问题)

从启动类中提取:

示例 Razor PageModel 方法:

更新

越来越接近解决方案,但还没有完全解决。解决了几个问题:

  1. 我最初在 Azure 中创建租户以使用 B2C AD,尽管我不再使用 B2C 并已切换到 Azure AD。直到我删除了租户并创建了一个新租户,我才开始看到可选声明正确地传递到 webapp。创建新租户并分配租户类型以使用 Azure AD 后,我发现“令牌配置”菜单现在可用于通过 UI 配置可选声明,似乎仍然需要修改 App 清单,如上图所示。

在此处输入图像描述

  1. 我必须将“配置文件”范围作为“委托”类型添加到 Azure 中的 webapp API 权限。

在此处输入图像描述

最后一个仍未解决的问题是,虽然我可以在调试期间看到存在的声明,但我无法弄清楚如何检索声明值。

在下面的方法中,我可以在使用 Debug 时看到所需的声明,但不知道如何检索这些值:

调试屏幕截图显示 given_name 和 family_name 存在:

在此处输入图像描述

在此处输入图像描述

我已经尝试使用声明主体尝试不同的代码示例来尝试获取值,但没有什么对我有用。希望这个最后的谜语对于知道所需语法的人来说相当简单,正如我们现在所说的,我们现在有所需的可选声明,只是不知道如何实际获取这些值。

0 投票
1 回答
148 浏览

c# - 如何将 Blazor 客户端 AuthorizeView 控制策略功能与 Azure Ad 结合使用?

我正在使用此链接中的 Microsoft 示例 https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/standalone-with-azure-active-directory?view=aspnetcore-3.1

我的 Program.cs 文件看起来像这样

我的 index.razor 文件看起来像这样

您可以在声明中看到用户 (minonOne) 在“组”部分拥有正确的声明,但它不显示我为该组中的用户添加的自定义消息。 在此处输入图像描述

我在这个配置中错过了什么?

0 投票
2 回答
104 浏览

adfs - ADFS claims rule iterate AD attribute

How do I iterate an AD attribute as a claims rule in ADFS?

More specifically, I'd like to check whether the user's proxyAddresses contains a predetermined domain, and if so, return that email as Name ID, else the the user's main email.

0 投票
1 回答
62 浏览

asp.net-core - 基于自定义角色的身份验证 .NET CORE

我有一个项目,其中用户可以担任多个角色,例如收银员和股票文员。这些角色具有相同的权限,但也可以有管理员和收银员的角色。在这种情况下,他可以访问比管理员/收银员更多的功能。

我已经进行了广泛的搜索,但我没有从文档中得到任何更明智的信息,因为我最初认为政策是要走的路,但现在我认为我们需要基于声明的授权。

在搜索和玩耍后,我发现以下问题没有答案:

  1. 我需要什么表/实体?
  2. 这可以在没有脚手架工具的情况下完成吗?
  3. 这整个过程是如何工作的,.NET CORE 是如何知道要查看哪些角色的?如何使用自定义角色?

如果有人可以帮助我解决这个问题,我将不胜感激。

干杯。

0 投票
0 回答
329 浏览

asp.net-core - .Net Core 3.1 ClaimsTransformation 手动添加的声明不持久

我将访问几个表以确定用户是否“已验证”,并将自定义角色添加到 Windows 身份验证用户以进行授权。现在我正在一个基本的 .net Core Web 应用程序中运行测试,只是为了看看我应该如何做。我在我的 Fallback Policy 和 ClaimsLoader 中设置了RequiredClaim,效果很好:

只要 AddClaim 行在那里,他们就可以访问该应用程序,没有它,他们会得到我想要的未经授权的响应。

根据我所阅读的内容,我认为我在转换中添加的任何声明/角色应该每次都回来,但他们没有。在上面的代码中,我每次都运行 AddClaim,因此它可以正常工作,但实际上我将去数据库以确定是否应该添加该声明,这是一个昂贵的过程。我想在多个请求中保留结果。因此,我想检查索赔是否已经存在,如果是,则不再打扰。无论出于何种原因,当它返回第二个请求时,它永远不会出现。

从我在 2.x 中读到的内容来看,声明应该持续存在: https ://philipm.at/2018/aspnetcore_claims_with_windowsauthentication.html

但在我的 3.1 应用程序中,它们没有。

0 投票
2 回答
1880 浏览

asp.net-mvc - ASP.NET Core Identity 是否使用会话进行身份验证?

ASP.NET Core 3.1/5 Identity 是否使用会话进行身份验证?我知道它使用 cookie 将用户信息存储在客户端计算机上以供下一个请求,但我不明白的是,只有 cookie 就足够了,还是它还在服务器上为这个身份验证 cookie 创建了任何会话?