静默地使用控制台应用程序内的ADFS进行身份验证

时间:2016-01-13 15:52:59

标签: adfs adal

我有一个引用ADAL.net库的c#控制台应用程序(Microsoft.IdentityModel.Clients.ActiveDirectory版本2.19.208020213)

控制台应用程序的目的是使用受ADFS保护的HTTP端点。

ADFS身份验证的实现如下....

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/'

在没有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:授权服务器不支持请求的   ' grant_type&#39 ;.授权服务器仅支持   ' authorization_code'或者' refresh_token'作为补助金类型。

但是,谷歌的收益率很低。

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

我是否正确(基于answers中的posts),正确的方法是使用WsTrustChannelFactory?

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

1 个答案:

答案 0 :(得分:5)

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