我有一个引用 ADAL.net 库的 C# 控制台应用程序(Microsoft.IdentityModel.Clients.ActiveDirectory 版本 2.19.208020213)
控制台应用程序的目的是使用受 ADFS 保护的 HTTP 端点。
ADFS auth 的实现如下......
var uc = new UserCredential("user", "password");
var ctx = new AuthenticationContext("https://sts.example.com/adfs", false);
var token = ctx.AcquireToken(ClientResourceUri, ClientId, uc);
对 AcquireToken 的调用引发异常...
不支持此方法重载
'https://sts.example.com/adfs/ https://sts.example.com/adfs/'
在没有 UserCredential 对象的情况下调用 AcquireToken,并提供一个 redirectUri 是可行的,但会弹出一个对话框,提示输入用户名和密码,这是不合适的,因为控制台应用程序将在非用户环境中执行...
var redirect = new Uri("https://example.com/arbitaryRedirect");
var token = ctx.AcquireToken(ClientResourceUri, ClientId, redirect);
//dialog is shown
如果我切换到 adal.net 库的最新 alpha 版本 (3.6.212041202-alpha)
这个错误更能说明问题......
MSIS9611:授权服务器不支持请求
'授予类型'。授权服务器仅支持
“authorization_code”或“refresh_token”作为授权类型。
然而,挖掘谷歌的收益很少。
是否真的可以针对 ADFS 进行静默身份验证?
我的假设是否正确(基于answers https://stackoverflow.com/questions/19400693/authentication-against-adfs-with-wcf-hosted-on-windows-service其他posts https://stackoverflow.com/questions/14521589/authenticating-against-ad-fs-from-a-net-4-5-console-app)正确的方法是使用 WsTrustChannelFactory 代替?
如果不是,最好的方法是什么?