【问题标题】:On-Prem ADFS Authentication with username and password to Azure AD (SharePoint-Online)使用 Azure AD 的用户名和密码进行本地 ADFS 身份验证 (SharePoint-Online)
【发布时间】:2021-05-16 12:24:43
【问题描述】:

我想针对 On-Prem ADFS Server 2019 使用用户名和密码对服务用户进行身份验证。然后使用提供的令牌在用户上下文中访问 SharePoint-Online 站点。这应该是单点登录 (SSO) 流程。在我的尝试中,我得到“AADSTS50013:断言签名验证失败”-错误。

On-Prem 应用注册配置如下:

然后我使用 MSAL C# 库来获取令牌,如下所示:

var authority = "https://adfs.MYCOMPANY.net/adfs";
IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientID)
                              .WithAdfsAuthority(authority)
                              .WithTenantId(tenantID)
                              .WithRedirectUri(RedirectUri)
                              .Build();
// convert password to SecureString
var securePassword = new SecureString();
foreach (char c in password) securePassword.AppendChar(c);
// Request Token 
var result = app.AcquireTokenByUsernamePassword(scopes, username, securePassword).ExecuteAsync().Result;
var token = result?.AccessToken;

这将导致 On-Prem ADFS 发出“有效”令牌(jwt.io 屏幕截图):

下一步是使用此令牌访问 SharePoint-Online 资源。但这会导致错误。出于测试目的,我向https://TENANT.sharepoint.com/_api/web/currentuser 发送了一个请求,标题为“Authorization=Bearer eyJ0...”,但它失败并显示“令牌包含无效签名”。

所以我还尝试通过向https://login.microsoftonline.com/7fc3a154-xxxx-xxxx-xxxx-xxxxxxxxxxxx/oauth2/token 发送请求来将 SAML 令牌转换为不同的 JWT 令牌。我在 Azure 中为此请求创建了一个单独的应用注册,但我无法在应用注册上启用 SSO,如下所述:https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/add-application-portal-setup-sso。所以下面的请求仍然给我一个“AADSTS50013:断言签名验证失败”。

我的想法是,本地 AD 与 Azure AD 同步。但错误看起来我需要向 Azure AD 添加额外的签名证书。

  1. 我需要在 Azure 中单独配置此证书吗?
  2. 或者我是否需要将此 Saml-Token 转换为其他令牌?

【问题讨论】:

    标签: c# azure-active-directory single-sign-on saml-2.0 adfs


    【解决方案1】:

    首先我的方法的问题是使用本地应用程序注册。我们想要访问 Azure 中的资源,因此我们需要在 Azure AD 中注册应用程序。

    第二个问题似乎是 MSAL 库的问题,因为我们通过 WithAdfsAuthority(authority) 获得的 JWT 令牌不能用于针对 Azure 的身份验证。 因此,我们首先需要手动从本地 ADFS 获取 SAML 令牌。然后使用 XML 格式的 SAML 令牌并将其发送到 $"https://login.microsoftonline.com/{tenantID}/oauth2/v2.0/token"。我找到了一个博客,其中详细记录了所有这些步骤: https://blogs.aaddevsup.xyz/2020/06/using-postman-to-request-an-azure-ad-token-via-saml-assertion-grant-flow/

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多