繁体   English   中英

OpenID Connect 身份验证成功。 怎么办?

[英]OpenID Connect Authentication Successful. Now what?

我正在用 C# 编写一个 Windows 服务,它需要使用 API 进行身份验证并进行一些调用。 我能够使用我正在与之交谈的这个 API 成功进行身份验证,但我似乎无法弄清楚如何使用响应。 响应如下所示:

{"access_token":"Es-Zjs_LI0tcXyLe3aEfgKPNLHN7CwyUhTss-cTld1A","expires_in":1800,"token_type":"Bearer","scope":"example","auth_state":1,"company":"examplecompany"}

如果需要,我可以从该字符串中获取访问令牌,但无论我如何将其传递给请求,都会收到 401 错误。 这是我当前迭代的样子:

    string results = "";
    var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",token);
    var request = new HttpRequestMessage
    {
        Method = HttpMethod.Get,
        RequestUri = new Uri("https://example.ca/endpoint"),
        //Headers =
        //{
        //    { "authorization", "Bearer"},
        //},
    };
    try
    {
        using (var response = await client.SendAsync(request))
        {
            response.EnsureSuccessStatusCode();
            var body = await response.Content.ReadAsStringAsync();
            results = body;
        }
    }
    catch (Exception ex)
    {
        results = "ERROR: " + ex.Message;
    }
    
    return results;

在此示例中,“token”是字符串“Es-Zjs_LI0tcXyLe3aEfgKPNLHN7CwyUhTss-cTld1A”。 我之前曾尝试将 access_token 值作为字符串拼接到中间注释部分中的“Bearer”字符串。 我究竟做错了什么? 我需要从响应中生成 JwtSecurityToken 吗?

AuthenticationResult authResult = await daemonClient.AcquireTokenForClient(new[] { MSGraphScope })
                                        .ExecuteAsync();
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);

我使用了authResult.AccessToken 不确定它是否适用于您的场景。 当我检索我正在使用的图形 API 的令牌时,返回类型是Microsoft.Identity.Client.AuthenticationResult类型。

请注意,您收到的令牌(“Es-Zjs_LI0tcXyLe3aEfgKPNLHN7CwyUhTss-cTld1A”)是参考令牌,而不是 JWT 令牌。 确保您的 API 接受该类型的令牌。

为了在生产中有效地使用令牌,我会考虑使用IdentityModel库中的各种辅助方法,尤其是Worker 应用程序辅助方法。

虽然我知道这在很大程度上取决于您尝试连接的 API,但对我来说,解决方案是使用此方法传递身份验证令牌:

request.Headers.TryAddWithoutValidation("Authorization", "Bearer " + token);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM