初探IdentityServer4(客户端模式)

DotNetCore实战

共 3077字,需浏览 7分钟

 ·

2022-01-05 18:21

Oatuth2协议的客户端模式介绍

    • Client Credentials Grant (客户端模式)是Oauth2.0协议中,四种模式自建单的一种。它由两部分构成,客户端认证服务器。认证服务器确认客户端无误后返回一个token,客户端请求带着token访问资源。(一般使用场景是在一个安全的环境下,例如我的同一个系统中,一个api请求另外一个api)。

    •  这里借用下阮一峰老师画的图(博客地址=》http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)

      907f3f8fbbe655136ce31fce10dc3b6a.webp

       

IdentityServer4客户端模式实现

  • 首先我们创建一个core的api项目作为认证服务器,添加nuget程序包IdentityServer4,将启动端口设置为5000

  • 接下来添加一个类,取名字叫做Config,我们用它来初始化Identityserver(配置要保护的资源和可以访问该API的客户端服务器)。
    代码如下:

///
/// Idnetity配置,初始化Identityserver
///

publicclassConfig
{
//定义要保护的资源(webapi)
publicstatic IEnumerable GetApiResources()
{
returnnew List
{
new ApiResource("api1", "My API")
};
}
//定义可以访问该API的客户端
publicstatic IEnumerable GetClients()
{
returnnew List
{
new Client()
{
ClientId = "client",
AllowedGrantTypes = GrantTypes.ClientCredentials, //设置模式,客户端模式
ClientSecrets =
{
new Secret("secret".Sha256())
},
AllowedScopes = { "api1" }
}
};
}
}
  • 接下来配置startup,将资源和客户端的初始信息服务加入到DI容器,同时引用IdentityServer中间件。代码如下所示:

        public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetApiResources()) //配置资源
.AddInMemoryClients(Config.GetClients()); //配置客户端
services.AddMvc();
}
publicvoidConfigure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//使用identityserver中间件
app.UseIdentityServer();
app.UseMvc();
}
  • 再添加一个webapi项目,作为我们的资源服务器。添加nuget包,IdentityServer4.AccessTokenValidation,将启动端口设置为5001

  • 2、配置startup,添加认证服务器地址,和apiname &&引用中间件,代码如下:

        public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000"; //配置Identityserver的授权地址
options.RequireHttpsMetadata = false; //不需要https
options.ApiName = "api1"; //api的name,需要和config的名称相同
});
services.AddMvc();
}
publicvoidConfigure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseAuthentication();// 添加认证中间件
app.UseMvc();
}
    • 将受保护资源controller添加[Authorize]。(因为资源服务器AddIdentityServerAuthentication 方法的参数和返回值都是AuthenticationBuilder(类似于一个中间件),所以可以多次调用AddIdentityServerAuthentication方法来控制这个api 资源可以让谁访问到。)

    • 最开始我们直接访问资源服务器的api,返回401,因为我们的资源被保护了。

    • 3a780eee81a672c49f27abe14cb8a49e.webp

    • 这时候来到IdentityServer4的官网,官网给出了这么一个地址=》ab0893792c2b759cbc72f37a28feb4ab.webp

    • 我们访问这个地址时候,它会返回我们的Config配置=》997b4cc3ebbb260c8c528d56669a914f.webp

    • 其中有一个token_endpoint的url地址,我们带着Client的配置来访问它=》071b6175563afc8a38b1dbbe28f7ce72.webp

    • 此时拿到Token,再带着token去访问我们的资源,争取获取到资源数据=》29dc39b4bea105f4b290ebf32bba39f6.webp

https://github.com/conanl5566/dotnet-core-Example/tree/master/WebApplication25


浏览 47
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报