[英]On-Prem ADFS Authentication with username and password to Azure AD (SharePoint-Online)
我想针对 On-Prem ADFS Server 2019 使用用户名和密码对服务用户进行身份验证。然后使用提供的令牌在用户上下文中访问 SharePoint-Online 站点。 这应该是单点登录 (SSO) 流程。 在我的尝试中,我收到“AADSTS50013:断言签名验证失败”错误。
然后我使用 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
发送了一个请求,其中 header 签名无效。
因此,我还尝试通过向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:断言签名验证失败”。
我的想法是,On-Prem AD 与 Azure AD 同步。 但错误看起来我需要向 Azure AD 添加额外的签名证书。
我的方法的第一个问题是使用本地应用程序注册。 我们想要访问 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 -流动/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.