【问题标题】:Token based authentication using ADFS使用 ADFS 的基于令牌的身份验证
【发布时间】:2017-12-28 10:56:34
【问题描述】:

我正在使用将 ADFS 登录页面与我的应用程序集成的功能。

流程

用户将尝试访问页面。此处系统将尝试对用户进行身份验证。

系统会将用户重定向到 ADFS 登录页面。

用户将输入登录信息。如果用户通过了身份验证,那么用户将被重定向回带有授权令牌信息的应用程序。

当页面被重定向回来时,我在读取令牌信息时遇到困难。

我试过了

如果用户使用以下 url 格式进行身份验证,我可以将页面重定向到 ADFS 登录页面,也可以重定向回我的系统:

https://adfs-domain-name/adfs/ls

返回页面读取token信息后,请找到下面我正在使用的代码sn-p。

ClaimsPrincipal claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
bool IsAuthenticated = claimsPrincipal.Identity.IsAuthenticated;
int ClaimCount = claimsPrincipal.Claims.Count();

在这里我得到 IsAuthenticated 为 false 和 ClaimCount 为 0 结果。

我的代码或连接 ADFS 登录页面的方式有什么不正确的地方吗?

谁能帮我解决这个问题?

如果您有任何疑虑或疑问,或者我遗漏了什么,请告诉我。

【问题讨论】:

  • 您如何连接到 ADFS? WS-美联储?萨姆勒?您是否检查过 ADFS RP 重定向 URL?如果您使用例如跟踪连接FF SAML Trace,您看到声明了吗?什么版本的 .NET?
  • 我使用 SAML 作为协议。我无法获得索赔详情。从 ADFS 登录页面成功登录后,该页面将被发布回我的应用程序。
  • 在 ADFS 端为该 RP 配置了哪些声明?那些 AD 属性有值吗? ADFS 不会传递空值。
  • 是的,我们已将电子邮件地址作为声明值传递,并且电子邮件地址的值包含电子邮件地址。

标签: asp.net authentication active-directory saml adfs


【解决方案1】:

简而言之,我建议您遵循本教程: https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/development/enabling-openid-connect-with-ad-fs-2016 我按照那里的步骤进行操作(使用 OAuth2 / OpenID 连接)。该网站上还有一些其他有趣的资源。

更多指点:

1) 对于使用 OAuth2,ADFS 服务器上的登录 URL 应该类似于: https://adfs.contoso.com/adfs/oauth2/authorize?[parameters]

URL 参数在这里有很好的记录: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code

2) 然后您可以将 ADAL 库用于前端和后端代码。本质上,前端代码会将上述登录 URL 放在一起,并将令牌保存在浏览器的会话存储中,以便随每个请求一起发送。后端库将为您验证和解码令牌(转换为 ClaimsPrincipal)。您可以在此处找到相应的库组件: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries

啊,是的,我知道这些组件和文档描述了 Azure AD(云中的 ADFS),但它们在那里运行的内容与 Windows Server 2016 上的 ADFS 4.0 基本相同。

【讨论】:

    猜你喜欢
    • 2021-01-25
    • 2016-10-02
    • 2016-01-23
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2015-12-24
    相关资源
    最近更新 更多