【问题标题】:Get an Access Token from an Identity Provider in .NET Core?从 .NET Core 中的身份提供程序获取访问令牌?
【发布时间】:2021-03-11 01:26:24
【问题描述】:

我正在公司设置 OAuth 2 和 OIDC。

我使用oidc-client.js 处理从 javascript 客户端调用受 OAuth 2 和 OIDC 保护的 API 的访问令牌。

当客户端是调用受 OAuth 2 和 OIDC 保护的 API 的 C# .NET Core 应用程序时,我现在需要获取访问令牌。

我可以尝试自己编写代码。但它有很多,我担心我会弄错一些。因此这个问题:

.NET Core 是否包含用于从身份提供者获取访问令牌的库?

明确,我不是寻找代码来保护具有 OAuth2 和 OIDC 的 ASP.NET 服务。该代码非常常见并且很容易找到。 (事实上​​很容易找到我要找的东西很难。)

【问题讨论】:

    标签: .net-core oauth-2.0 access-token openid-connect idp


    【解决方案1】:

    我在发出传出请求的 .Net Core 项目中使用 Identity Model OIDC Client。它支持我认为的所有主要流程,并且经过认证/基于标准。

    我的一些代码使用它的类 here 来演示语法类型。

    如果您正在编写一个让用户登录的非浏览器应用程序,那么这很棘手,并且往往涉及调用系统浏览器。上面的库有classes to support that

    【讨论】:

      【解决方案2】:

      简短的回答是肯定的。如果我理解你的问题。

      查看 IdentityServer4 https://identityserver4.readthedocs.io/en/latest/ 上的文档,因为它提供了从 asp.net 核心访问 OAuth2 令牌服务的示例,并且它应该转换为您正在使用的任何令牌服务器。

      但本质上,您设置了将用于请求的 http 客户端: 其中:Client 是 HttpClient 的一个实例

      DiscoveryDocumentResponse disco = await 
      Client.GetDiscoveryDocumentAsync("https://your_token_server/");
      
      var tokenResponse = await Client.RequestClientCredentialsTokenAsync(new 
      ClientCredentialsTokenRequest
              {
                  Address = disco.TokenEndpoint,
      
                  ClientId = "Some_Client_Id",
                  ClientSecret = "Some_Client_Secret",
                  Scope = "Some_Api_Scope"
              });
              Client.SetBearerToken(tokenResponse.AccessToken);
      

      API 也需要设置,但我建议的文档中有很多示例

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-12
        • 2018-09-20
        • 2015-04-16
        • 2017-12-13
        • 2021-11-03
        • 2017-07-03
        • 2021-05-03
        • 1970-01-01
        相关资源
        最近更新 更多