在控制台应用程序内通过ADFS进行静默身份验证

Bal*_*ldy 5 adfs adal

我有一个引用ADAL.net库的ac#控制台应用程序(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);
Run Code Online (Sandbox Code Playgroud)

对AcquireToken的调用引发异常...

' 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
Run Code Online (Sandbox Code Playgroud)

如果我切换到adal.net库的最新Alpha版本(3.6.212041202-alpha),该错误将更加明显...

MSIS9611:授权服务器不支持所请求的'grant_type'。授权服务器仅支持“ authorization_code”或“ refresh_token”作为授予类型。

但是,开采google的收益很少。

实际上可以针对ADFS进行静默身份验证吗?

我会基于基于其他帖子的回答而假设正确的方法是使用WsTrustChannelFactory来正确吗?

如果没有,最好的方法是什么?

小智 5

可以在Windows Server 2016中使用ADAL 3.x和ADFS,使用几乎与您发布的代码相同的代码。较旧版本的ADAL或ADFS的组合将无法使用。或者,您可以使用WS-Trust-很难处理,但可以完成工作。