欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

程序员文章站 2022-06-20 18:25:51
前言 OAuth 2.0默认四种授权模式(GrantType) 授权码模式(authorization_code) 简化模式(implicit) 密码模式(resource owner password credentials) "客户端模式(client_credentials)" 本章主要介绍客 ......

前言

oauth 2.0默认四种授权模式(granttype)

  • 授权码模式(authorization_code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)

本章主要介绍客户端模式(client credentials)
,他主要是由两部分构成客户端和认证服务器.
认证服务器在确定客户端信息无误后向客户端返回token,客户端请求资源时带着该token进行访问.(在这种模式中用户可直接向客户端注册,客户端再以自己的名义请求认证服务器)

搭建认证服务器

创建一个api项目工程,端口设置为5000

package

pm> install-package identityserver4 -version 2.5.3

创建一个类config(配置要保护的资源和可以访问该api的客户端服务器)

    /// <summary>
    ///     identity配置
    /// </summary>
    public class config
    {
        /// <summary>
        ///     定义要保护的资源
        /// </summary>
        /// <returns></returns>
        public static ienumerable<apiresource> getapiresources() {
            return new list<apiresource>
            {
                new apiresource("api1", "my api")
            };
        }
        /// <summary>
        ///     定义授权客户端
        /// </summary>
        /// <returns></returns>
        public static ienumerable<client> getclients() {
            return new list<client>
            {
                new client()
                {
                    clientid = "client",
                    allowedgranttypes = granttypes.clientcredentials, //设置模式,客户端模式
                    clientsecrets =
                    {
                        new secret("secret".sha256())
                    },
                    allowedscopes = { "api1" }
                }
            };
        }
    }
配置startup

在configureservices方法中注入identityserver4服务

 public void configureservices(iservicecollection services)
        {
            services.addmvc().setcompatibilityversion(compatibilityversion.version_2_2);
            services.addidentityserver()//identityserver4服务
               .adddevelopersigningcredential()
               .addinmemoryapiresources(config.getapiresources()) //配置资源
               .addinmemoryclients(config.getclients());//把配置文件的client配置资源放到内存
        }

在configure方法中添加identityserver4服务中间件

app.useidentityserver();

搭建 api resource

创建一个客户端工程项目,端口设置为5001

package

pm> install-package identityserver4.accesstokenvalidation -version 2.7.0

配置startup

在configureservices添加认证服务器地址

  public void configureservices(iservicecollection services)
        {
            services.addauthentication("bearer")
               .addidentityserverauthentication(options =>
               {
                   options.authority = "http://localhost:5000";//授权服务器地址
                    options.requirehttpsmetadata = false;//不需要https    
                    options.apiname = "api1";
                });
            services.addmvc().setcompatibilityversion(compatibilityversion.version_2_2);
        }

在configure方法中添加identityserver4服务中间件

app.useidentityserver();

测试

在客户端values控制器上面增加[authorize]

直接访问资源服务器http://localhost:5001/api/values
asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

访问受限了 code 401

启动授权服务器

发现端点可通过/.well-known/openid-configuration

asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

获取token

启动后我们通过token_endpoint获取token
asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

client_id为我们在授权服务器配置的clientid,
client_secret为配置中的secret,
grant_type为授权模式此处为客户端模式(client_credentials),
请求后返回凭证信息,
我们通过access_token再去访问资源服务器
使用这种授权类型,会向token 。

asp.net core IdentityServer4 实现 Client credentials(客户端凭证)

code 200

概要

示例地址:https://github.com/fhcodegit/identityserver4.samples
identityserver4叙述: