AAD - AcquireToken 屏幕被阻止,因为 Windows 服务器 ESC
AAD - AcquireToken screen blocked because Windows Server ESC
我使用 acquireTokenAsync 方法如下:
var authenticationContext = new AuthenticationContext(azureActiveDirectoryAuthority);
var authenticationResult =
await authenticationContext.AcquireTokenAsync(
azureActiveDirectoryResource,
azureActiveDirectoryClientId,
new Uri("urn:ietf:wg:oauth:2.0:oob"),
new PlatformParameters(
PromptBehavior.Always,
Process.GetCurrentProcess().MainWindowHandle));
它在 Windows10 上运行良好。
当我 运行 Windows 服务器中的应用程序具有增强的安全配置(ESC)时,
事实证明,用户输入其凭据以使用 AzureAD 进行身份验证的提示 window 被阻止,因为 url:
https://login.microsoftonline.com
https://secure.aadcdn.microsoftonline-p.com
不在 Internet Explorer 安全配置的默认受信任站点中。
The window pop-up getting blocked by IE Security settings
我可以手动或以编程方式更改此配置(例如编辑注册表),但此代码是 运行 在客户服务器上安装的一部分,因此我无法轻易更改这些安全设置.
是否有任何解决方案可以在使用 ESC 的 Windows 服务器中对 AzureAD 使用此身份验证,而不会在 IE 中被阻止?
是否有其他 API 不使用 IE 浏览器,或以某种方式使用其他浏览器(如 chrome 不阻止这些网站)?
谢谢,
尼夫
I can change this configuration manually or programmatically (editing registry for example) , but this code is part of an installation that runs on the customer’s server so I can’t change these security settings that easily
建议不要禁用 Windows 服务器 ESC,而是将 Microsoft 的站点添加到信任 URL。我们也可以使用代码来完成此操作,以下是使用 PowerShell 的代码示例供您参考:
If($TrustedSites)
{
#Adding trusted sites in the registry
Foreach($TruestedSite in $TrustedSites)
{
#If the user does not specify the user type, by default the script will add the trusted sites for the current user.
If($HTTP)
{
CreateKeyReg -KeyPath $UserRegPath -Name $TruestedSite
SetRegValue -RegPath "$UserRegPath$TruestedSite" -blnHTTP $true -DWord $DWord
Write-Host "Successfully added '$TruestedSite' domain to Internet Explorer trusted Sites."
}
Else
{
CreateKeyReg -KeyPath $UserRegPath -Name $TruestedSite
SetRegValue -RegPath "$UserRegPath$TruestedSite" -blnHTTP $false -DWord $DWord
Write-Host "Successfully added '$TruestedSite' domain to Internet Explorer trusted Sites."
}
}
}
您可以参考 here 中的完整代码示例。
注意:
上面的脚本不适用于Windows Server 2016,我们需要将$UserRegPath
从HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains
修改为HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains
Is there any solution to use this authentication for AzureAD within Windows Server using ESC, without getting blocked within IE? Is there some other API that doesn’t use IE browser, or somehow using other browser (like chrome that doesn’t block these sites)?
不,没有这样的API。默认情况下,dotnet 的 ADAL 库使用 WebBrowser 控件与用户交互。(参考源代码 here)
我使用 acquireTokenAsync 方法如下:
var authenticationContext = new AuthenticationContext(azureActiveDirectoryAuthority);
var authenticationResult =
await authenticationContext.AcquireTokenAsync(
azureActiveDirectoryResource,
azureActiveDirectoryClientId,
new Uri("urn:ietf:wg:oauth:2.0:oob"),
new PlatformParameters(
PromptBehavior.Always,
Process.GetCurrentProcess().MainWindowHandle));
它在 Windows10 上运行良好。
当我 运行 Windows 服务器中的应用程序具有增强的安全配置(ESC)时,
事实证明,用户输入其凭据以使用 AzureAD 进行身份验证的提示 window 被阻止,因为 url:
https://login.microsoftonline.com
https://secure.aadcdn.microsoftonline-p.com
不在 Internet Explorer 安全配置的默认受信任站点中。
The window pop-up getting blocked by IE Security settings
我可以手动或以编程方式更改此配置(例如编辑注册表),但此代码是 运行 在客户服务器上安装的一部分,因此我无法轻易更改这些安全设置.
是否有任何解决方案可以在使用 ESC 的 Windows 服务器中对 AzureAD 使用此身份验证,而不会在 IE 中被阻止? 是否有其他 API 不使用 IE 浏览器,或以某种方式使用其他浏览器(如 chrome 不阻止这些网站)?
谢谢,
尼夫
I can change this configuration manually or programmatically (editing registry for example) , but this code is part of an installation that runs on the customer’s server so I can’t change these security settings that easily
建议不要禁用 Windows 服务器 ESC,而是将 Microsoft 的站点添加到信任 URL。我们也可以使用代码来完成此操作,以下是使用 PowerShell 的代码示例供您参考:
If($TrustedSites)
{
#Adding trusted sites in the registry
Foreach($TruestedSite in $TrustedSites)
{
#If the user does not specify the user type, by default the script will add the trusted sites for the current user.
If($HTTP)
{
CreateKeyReg -KeyPath $UserRegPath -Name $TruestedSite
SetRegValue -RegPath "$UserRegPath$TruestedSite" -blnHTTP $true -DWord $DWord
Write-Host "Successfully added '$TruestedSite' domain to Internet Explorer trusted Sites."
}
Else
{
CreateKeyReg -KeyPath $UserRegPath -Name $TruestedSite
SetRegValue -RegPath "$UserRegPath$TruestedSite" -blnHTTP $false -DWord $DWord
Write-Host "Successfully added '$TruestedSite' domain to Internet Explorer trusted Sites."
}
}
}
您可以参考 here 中的完整代码示例。
注意:
上面的脚本不适用于Windows Server 2016,我们需要将$UserRegPath
从HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains
修改为HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains
Is there any solution to use this authentication for AzureAD within Windows Server using ESC, without getting blocked within IE? Is there some other API that doesn’t use IE browser, or somehow using other browser (like chrome that doesn’t block these sites)?
不,没有这样的API。默认情况下,dotnet 的 ADAL 库使用 WebBrowser 控件与用户交互。(参考源代码 here)