【问题标题】:ADFS v4.0 and /userinfo endpoint giving 405ADFS v4.0 和 /userinfo 端点给出 405
【发布时间】:2020-02-25 21:47:47
【问题描述】:

将旧的 ASP.NET 服务器端应用程序集成到 ADFS 以进行身份​​验证,这意味着我几乎必须从头开始编写所有内容。在调用 /userinfo 之前,一切正常(/authorize、/token)。

简而言之,我的代码 -

HttpClient client = new HttpClient();

var req = new HttpRequestMessage {
    RequestUri = new Url("https://<server_ip>/adfs/oauth2/userinfo"),
    Method = HttpMethod.Get,
};
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
req.Headers.UserAgent.Clear();
req.Headers.UserAgent.Add(new ProductInfoHeaderValue("OldApp", "11.3.0"));
var result = await client.SendAsync(req);

结果是 HTTP 错误 405 - Method Not Allowed。在网上进行搜索时,我认为这是一个常见的问题,因为 URL 后面的“/”被省略了,但是 我得到了与尾部斜杠相同的结果

在四处寻找之后,有很多使用较新库的示例,遗憾的是我无法使用。没有人提到 /userinfo 的使用,我认为问题不一定在于我如何调用 URL,而是 ADFS 中“应用程序组”的配置。

【问题讨论】:

    标签: c# asp.net oauth-2.0 adfs


    【解决方案1】:

    好的 - 我发现了问题,并将在此处记录以防其他人遇到同样的事情..

    虽然我不确定 /userinfo 为何给出 405 - 我使用的 URL 是错误的,尽管它已列在 Endpoints 文件夹中。 URL 中不应有任何“oauth2”。正确的代码(和 URL)是:

    var req = new HttpRequestMessage {
        RequestUri = new Url("https://<server_ip>/adfs/userinfo"),
        Method = HttpMethod.Get,
    };
    req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.AccessToken);
    req.Headers.UserAgent.Clear();
    req.Headers.UserAgent.Add(new ProductInfoHeaderValue("OldApp", "11.3.0"));
    var result = await client.SendAsync(req);
    

    还有一点需要牢记——这已经在其他地方说明过,但没有这里那么清楚,我希望: /userinfo 只会给你 NameIdentifier ("sub") 声明。 (据我所知。)无论您通过什么范围。您将从/token 调用的“id_token”参数中获得所有信息(通常应该在/userinfo 调用中),编码为JWT。

    【讨论】:

      【解决方案2】:

      我个人被引导做和你一样的事情,唯一的解决方案是下载 ADAL(你会在下面找到链接) 并调试代码以便从 ADAL 重新生成相同的 HTTP 流。

      您可以创建一个新项目,以便您可以集成 ADAL,用于调试或拦截 HTTP

      Link ADAL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-03
        • 2017-04-27
        • 2018-05-09
        • 2021-09-05
        • 1970-01-01
        • 2020-11-25
        • 2015-10-09
        • 1970-01-01
        相关资源
        最近更新 更多