【问题标题】:Authenticate with ADFS inside Console App silently以静默方式在 Console App 内使用 ADFS 进行身份验证
【发布时间】:2016-01-13 15:52:59
【问题描述】:

我有一个引用 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/'

在没有 UserCredential 对象的情况下调用 AcquireToken,而是提供 redirectUri 有效,但会弹出一个提示输入用户名和密码的对话框,这是不合适的,因为控制台应用程序将在非用户环境中执行...

var redirect = new Uri("https://example.com/arbitaryRedirect");
var token = ctx.AcquireToken(ClientResourceUri, ClientId, redirect);
//dialog is shown

如果我切换到 adal.net 库 (3.6.212041202-alpha) 的最新 alpha 版本 这个错误更能说明问题......

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

然而,谷歌挖矿收益甚微。

真的可以对 ADFS 进行静默身份验证吗?

我是否正确假设(基于 answers 在其他 posts 中)正确的方法是使用 WsTrustChannelFactory 代替?

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

【问题讨论】:

标签: adfs adal


【解决方案1】:

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

【讨论】:

  • 感谢 Vittorio,在过去几天里,我浏览了您的许多博客文章,同时试图将它们拼凑起来。我已经让 WsTrust 验证并通过肥皂返回一个 RST,现在我只需要弄清楚我是否可以以某种方式将其转换为 JWT(或任何可以与 HTTP 一起使用的令牌)并在 HTTP 请求中使用它受 ADFS 保护的 API。
  • 你应该可以直接通过 wstrust 获取 JWT——虽然我自己从未做过,但 adfs 文档应该给出一些提示
  • @Baldy:我面临着同样的挑战——我必须访问一个受 Windows Server 2012R2 上运行的 ADFS 保护的 REST API。您找到实现这一目标的方法了吗?
  • 是否有关于如何设置 ADFS 2016 以允许 OP 请求的文档?我一辈子都无法让它工作,我认为我在 ADFS 2016 上没有正确的配置设置。
猜你喜欢
  • 2013-08-31
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多