从.NET Core中的身份提供者获取访问令牌?

时间:2020-02-05 22:45:31

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

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

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

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

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

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

要明确,我正在寻找代码来保护带有OAuth2和OIDC的ASP.NET服务。该代码非常常见,很容易找到。 (实际上很难找到我要找的东西。)

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

简短的答案是肯定的。如果我理解您的问题。

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

但实际上,您是设置要用于请求的http客户端: 其中:客户端是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,但是我建议的文档上有很多示例