问题标签 [adfs4.0]

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

reactjs - 使用 id_token、ADFS 2016 和 react-adal 请求访问令牌

我有一个客户端应用程序,我正在使用 ADFS 和 react-adal 进行身份验证,我已经完成了大部分工作,但似乎无法找到一种方法来请求访问令牌(因此刷新令牌) id_token 这是我从 ADFS 得到的全部回报。

目前 React 应用程序将用户转发到 ADFS 进行登录,然后验证令牌,我希望能够从 /adfs/userinfo 端点获取用户信息(姓名、姓氏、角色等),但需要不记名令牌这样做。

目前我的 componentWillMount 函数看起来像这样

我坚持的一点是第二个 axios get 方法,它在同一个原点上命中了一个控制器动作。

当然,响应返回未经授权。我找不到有关如何从 id_token 获取访问令牌的任何信息,或者在前端使用 Adal.js 库从 React 获取访问令牌的任何方式,有没有人通过这个?

编辑:我从 id_token 获得的唯一信息如下。

0 投票
1 回答
1589 浏览

reactjs - 从 ADFS 2016、react、ADAL.js 获取用户信息

我已经在这个问题上停留了一段时间,我在前端使用 ADAL.js 来处理登录和身份验证。登录后,我需要获取用户的信息(角色、组、名称等),但是除了 401 之外,我无法从 /adfs/userinfo 端点获取任何信息。

到目前为止,我登录用户并取回与访问密钥相同的 id_token 和访问令牌(或浏览器中的“adal.access.token.key{guid}”)。由于前端的 cors 问题,我将其发送到后端 mvc core 2.2 控制器以调用 /adfs/userinfo,这是我得到 401 的地方。下面的 Javascript 代码

和控制器动作...

在这一点上,我很难过,我想我要么不能为此使用 ADAL,要么可能需要使用 oidcin 而不是 OAuth/jwt,但我不想重写很多东西只是为了找出不要么工作,要么有更好/最佳实践的方法。以前有没有人遇到过这个问题和/或可以指出我正确的方向或可以看到我哪里出错了?

我尝试过的其他事情;

  • 命中 adfs/oauth/token 端点(只返回 adfs 服务器错误)
  • 将后端的授权设置为client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer" + access_token);(仅返回无效令牌)。
  • 将前端和后端设为 post 方法并getCachedToken在 ADAL AuthenticationContext 上使用该方法

编辑:我也打开了这个问题,其目标是获得带有 id 令牌的访问令牌

0 投票
1 回答
1694 浏览

oauth-2.0 - ADFS 2016 - OAuth2 SPA - 静默获取新令牌

我有一个 SPA,用户在 ADFS 中进行身份验证,应用程序获取访问令牌。我正在尝试使用 JS 代码来模拟 ADAL JS 的功能,其中隐藏的 iframe 用于向 ADFS 发出请求以获取新令牌。

这是 iframe 的“src”值:

https://../adfs/oauth2/authorize?client_id=...&response_type=id_token&redirect_uri=...&prompt=none&domain_hint=...&login_hint=...&nonce= ...

ADFS 配置有两个领域:AD 和 ADLDS (LDAP)。因此,我不确定我需要为 ADLDS 中的用户传递 domain_hint 和 login_hint 参数的哪些值。

请求失败并显示消息:

https://....html?client-request-id=...#error=login_required&error_description=MSIS9621%3a+Unable+to+handle+the+OAuth+authorization+request+without+getting+user+input

ADFS 事件查看器显示此错误:

异常详细信息:Microsoft.IdentityServer.Web.Protocols.OAuth.Exceptions.OAuthNoPassiveException:MSIS9233:为 OAuth 授权请求找到多个身份提供程序,提示设置为无。无法完成家庭领域发现。

ADFS 2016 是否实际支持此功能?知道我在做什么错吗?

0 投票
1 回答
19 浏览

single-sign-on - 如果身份是不同的电子邮件,则将 UPN 作为 NameIDd 传递

我们的UPNprimary SMTP是不同的,由于母公司控制着环境的这方面,我无法改变这一点。

我有一个本地 ADFS 4.0 服务器,我们可以完全控制它,到目前为止,我们有大约 12 个网站/应用程序设置,它们都可以正常工作。

到目前为止,在每个实例中,该网站都有一个字段"email"和一个我可以使用的单独字段"federation ID",我用UPN. 然后我设置我的声明以接受UPN as NameID并且一切正常。

现在我必须设置两个没有给我该选项的新站点,但是我必须将其Primary SMTP放入电子邮件字段中,这是我可以传递给我的索赔的唯一字段。

我想知道我们的用户是否仍然可以使用登录,name@parentcorp.com即使电子邮件是name@childcorp.com.

通常我会认为这是可能的,但我阅读了一篇关于配置备用登录 ID 的 MS 文章并认为这可能是可能的。或使用索赔政策部分下的转换传入索赔选项。

0 投票
1 回答
81 浏览

single-sign-on - 信任外部组织 ADFS 服务器并使用 openid Connect 令牌

ADFS 服务器 2016 支持 openId 连接。我有托管 ADFS 服务器的外部组织,我希望我的 Web 应用程序使用 openIdConnect 从外部 ADFS 服务器进行身份验证。

问题:根据 Microsoft 文档。如果我们想使用外部组织的 ADFS,我们也应该在我们的组织中托管 ADFS。我的应用程序应该信任托管在我的组织内部的 ADFS,而不是直接信任外部 ADFS。

在这里我想知道为什么我们不能使用 opendiconnect 直接信任 External ADFS ?这似乎是可能的。不直接信任外部 ADFS 的原因是什么?

0 投票
1 回答
913 浏览

powershell - ADFS PowerShell:在 IssuanceTransformRules 中使用 RuleTemplate 编写 Web API (Add-AdfsWebApiApplication)

我已经使用 ADFS MMC 定义了一个 ADFS 应用程序组。我想为部署创建一个脚本。我已经使用 New-AdfsApplicationGroup 和 Add-AdfsNativeClientApplication 成功编写了脚本。接下来,我想编写 Web API 脚本。查看 Get-AdfsWebApiApplication 的输出,我看到以下 IssuanceTransformRules。该规则被命名并引用一个模板。

@RuleTemplate = "LdapClaims"

@RuleName = "2"

c:[Type == " http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname ", Issuer == "AD AUTHORITY"]

=>问题(存储=“活动目录”,类型=(“ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress ”,“ http://schemas.xmlsoap.org/ws /2005/05/identity/claims/name ", " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn "), query = ";mail,sAMAccountName,userPrincipalName;{0} ", 参数 = c.Value);

我将其编写为:

这会导致以下错误。

解析器错误:'POLICY0030:语法错误,意外的 COMMA,期待以下之一:O_SQ_BRACKET IDENTIFIER NOT AT AT IMPLY。在 line:1 char:1 + Add-AdfsWebApiApplication -Name "My Web API" -AllowedClientTypes ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :InvalidData: (@RuleTemplate =... ram = c.Value);:String) [Add-AdfsWebApiApplication], PolicyValidationException + FullyQualifiedErrorId: POLICY0002.Microsoft.IdentityServer.Management.Commands.Add-AdfsWebApiApplicationCommand

删除@RuleTemplate 和@RuleName,以下成功执行但生成无法使用图形模板编辑的自定义规则,该图形模板提供LDAP 属性和传出声明类型的下拉列表。

有人会建议一种在脚本中包含名称或模板的方法吗?

0 投票
1 回答
77 浏览

active-directory - 针对自定义用户存储的桌面登录

我们正在尝试设置 Windows 桌面登录以针对自定义用户存储而不是活动目录进行身份验证

我们有一个自定义用户存储,其中包含 SQL 服务器数据库中的所有用户详细信息,如用户名、密码哈希、角色等。当前用户可以使用以下 3 个选项对其进行身份验证/授权

1> 通过传递他的凭据来使用通过 WCF 公开的接口。

2> 通过 Radius 协议(使用带有插件的 Windows NPS/IAS 服务进行身份验证/授权)。

3> 在 REST 上使用 OpenID Connect(使用 IdentitiyServer3 框架)。

我们希望将此与 Windows Active Directory 集成,并希望桌面登录根据用户是 AD 成员还是用户存储成员来针对自定义用户存储而不是 Active Directory 进行身份验证。

  • 我们不想使用自定义 Windows 凭据提供程序。也试过 pGina。不适合我们。

  • 我们能够使用 OpenIDConnect/WS-Federation 成功与 ADFS (windows server 2016) 集成。但不知道如何将桌面登录与 ADFS 链接。

如果需要,我们已准备好围绕我们的用户存储编写 LDAP 包装器。

是否可以使 Windows 桌面登录适用于上述场景?

如果需要更多信息,请告诉我。

0 投票
1 回答
74 浏览

asp.net-core - 如何使用本地 ADFS 验证和获取 ASP .NET CORE WEB API 应用程序的令牌?

我有一个使用 ADFS 进行身份验证的 Web 应用程序,该应用程序是在 .net 框架中完成的。到目前为止,我已经在 ASP.NET Core 中编写了服务,没有针对 Web api 请求的身份验证我想将 ADFS 身份验证添加到 Web api 我如何访问这个 Web api?将其配置为 adfs 后如何与此 api 对话?访问 web api 的最佳方式是什么,因为它们都是 ADFS 应用程序

0 投票
1 回答
1253 浏览

security - ADFS 4.0 (2016) API 资源的机密和本机客户端注册

鉴于以下代表场景,如下所述:https ://docs.microsoft.com/sv-se/windows-server/identity/ad-fs/development/ad-fs-on-behalf-of-authentication -在 Windows 服务器中

ADFS OBO

问题

是否可以将 ADFS 2016 中的中间层服务配置为机密客户端(代表中间层客户端)从 swagger ui 中使用的公共/本机客户端?

了解示例

为了让中间层服务能够代表用户访问后端 webapi,我们需要在 ADFS 中注册一个机密客户端(clientid/secret),并将 ClientID 设置为 Audience,如文档中所述:“它ida:Audience 和 ida:ClientID 相互匹配非常重要”

这意味着应用程序组现在包含一个机密客户端,其中中间层服务 URL(受众)设置为 clientId,而不是您通常在此处期望的 guid ,为了这个示例,假设为https://localhost:5005 。

这很好,该示例现在可以工作,请参阅:https ://github.com/ajtowf/WebApp-OpenIDConnect-DotNet以获取工作示例。

问题

假设我现在想将带有 swagger-ui 的 swagger 添加到中间层服务。恕我直言,这将在 ADFS 中配置为本机客户端,因为我们要使用隐式流。(ADFS 2016 不支持使用 PKCE 的授权代码流)

如果我们使用 swagger 的 guid 配置本机客户端,则颁发令牌的受众群体无法用于访问中间层服务本身。(从外观上看,它可以用来访问用户信息端点:urn:microsoft:userinfo

要为中间层服务获取有效的 access_token,需要将 clientid 设置为受众,就像在机密客户端案例中一样。

ClientID 需要在应用程序组中是唯一的,因此只能有一个将 clientid 设置为受众的注册。

甚至可以配置两个单独的流/客户端吗?我错过了什么吗?

这似乎是一个超级基本的场景,可以使用 IdentityServer 轻松配置,但在这种情况下我坚持使用 ADFS。

ADFS 配置

根据代表方案的文档的工作示例。 根据代表方案的文档的工作示例。

ClientID 为中间层服务客户端设置为受众,以便能够代表用户访问后端 WebAPI。 ClientID 为中间层服务客户端设置为受众,以便能够代表用户访问后端 WebAPI。

swagger 的公共客户端注册,由于 guid 作为 ClientID 而不是资源 url,将导致不良受众。 swagger 的公共客户端注册,由于 guid 作为 ClientID 而不是资源 url,将导致不良受众。

不能(显然)添加另一个具有相同 ClientID 的应用程序。 不能(显然)添加另一个具有相同 ClientID 的应用程序。

0 投票
1 回答
2290 浏览

dynamics-crm - ADFS 4 -“X-Frame-Options”到“拒绝”

我在 Dynamics CRM 中嵌入了一个 aspx 页面。aspx 页面使用 openId 和 adfs 应用程序组进行身份验证,并且一直在工作,直到安全更新 KB4493473(假设更新导致问题)。在更新之前,当用户加载 CRM 表单时,iframe 将无缝加载而不会出现问题或身份验证提示。自更新以来,控制台给出以下消息:' https://sts ...... &x-client-SKU=ID_NET451&x-client-ver=5.2.1.0' 在一个框架中,因为它将“X-Frame-Options”设置为“拒绝”。

我还没有找到任何方法让 adfs 不发送那个 x-frame 标头,这里有什么解决方法吗?