小编Mir*_*ira的帖子

MSAL.NET 中的令牌缓存序列化不起作用

我在尝试序列化令牌缓存时遇到了一些问题,通过 MSAL 进行身份验证返回。我将不胜感激,因为我真的不明白我做错了什么。这是我们的情况/问题:

我们目前正在使用 ADAL 来允许用户从我们的桌面应用程序对其 SharePoint Online 帐户进行身份验证,但希望切换到 MSAL。

我们已经实现了两种可能的身份验证流程。一个 publicClientApplication,允许用户使用其当前活动的 Microsoft 凭据和 ConfidentialClientApplication 进行身份验证,允许使用证书进行身份验证,如您在以下代码的 catch 块中所见:

                try
                {
                     Debugger.Launch();
                    if (certificate != null)
                    { 
                        IConfidentialClientApplication m_authContext = ConfidentialClientApplicationBuilder.Create(pClientID)
                            .WithTenantId(m_tenant).WithCertificate(certificate).WithRedirectUri(pClientRedirectURI).Build();
                        var accounts = await m_authContext.GetAccountsAsync();
                        authResult = await m_authContext.AcquireTokenSilent(m_scope, accounts.FirstOrDefault()).ExecuteAsync();
                    }
                    else
                    {
                        IPublicClientApplication m_authContext = PublicClientApplicationBuilder.Create(pClientID).WithTenantId(m_tenant).WithRedirectUri(pClientRedirectURI).Build();
                        var accounts = await m_authContext.GetAccountsAsync();
                        authResult = await m_authContext.AcquireTokenSilent(m_scope, accounts.FirstOrDefault()).ExecuteAsync();
                    }
                }
                catch
                {   
                    if (certificate != null)
                    { 
                        IConfidentialClientApplication m_authContext = ConfidentialClientApplicationBuilder.Create(pClientID)
                            .WithTenantId(m_tenant).WithCertificate(certificate).WithRedirectUri(pClientRedirectURI).Build();
                        TokenCacheHelper.EnableSerialization(m_authContext.AppTokenCache);
                        authResult = await m_authContext.AcquireTokenForClient(m_scope).WithForceRefresh(true).ExecuteAsync();
                    }
                    else
                    { …
Run Code Online (Sandbox Code Playgroud)

.net c# azure-active-directory adal azure-ad-msal

13
推荐指数
1
解决办法
232
查看次数

使用包含特殊字符的密码通过 SAML 请求 STS 令牌

编辑:我注意到错误不仅发生在五个 XML 保留字符上,还发生在其他特殊字符上。

我用于获取 STS 令牌的 SAML 请求有问题。

SAML 请求以 XML 格式显示。如果随请求发送的密码包含 XML 保留的字符,则登录失败。我试图转义字符 ( & = &) 或使用 CDATA

( lBuilder.Append('<o:Password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"><![CDATA[').Append(lPassword).Append(']]></o:Password>');)

但显然密码无法正确识别,登录仍然失败。如果我使用 CDATA,即使使用有效密码登录也会失败。请求通过 post 命令发送到https://login.microsoftonline.com/RST2.srf (cDefaultSTS)。

有没有办法在没有冲突的情况下正确转义密码中的特殊字符?代码是用 Delphi 编写的,我使用以下客户端设置来发送 post 命令(lSAMLRequestStream 包含 XML 格式的请求)。

lConnection.Client.Accept := '*/*';
lConnection.Client.AcceptLanguage := 'en-US';
lConnection.Client.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)';
lConnection.Client.ContentType := 'application/soap+xml';
lConnection.Client.HandleRedirects := True;
lConnection.Client.AcceptEncoding …
Run Code Online (Sandbox Code Playgroud)

c# xml delphi sharepoint saml

6
推荐指数
1
解决办法
212
查看次数