源码在文末连接提供
直接建立一个asp.net core mvc 空项目叫IdentityServerDemo1
nuget包搜索 IdentityServer4 进行引入
把launchSettings.json 文件的启动端口改为5000
新建一个类config 配置客户端信息和范围
using IdentityServer4.Models;
using IdentityServer4.Test;
internal class Config
{
public static IEnumerable GetApiScopes() {
return new[] { new ApiScope("api", "api"), new ApiScope("qq", "1234") };
}
public static IEnumerable GetClients()
{
return new List() {
new Client(){
ClientId ="api", //到时填写的client_id
AllowedGrantTypes = GrantTypes.ClientCredentials //授权模式 grant_type client_credentials
,AllowedScopes=new []{ "api","qq" }, //允许访问的访问 scope 可以不填,如果填的话要填对。
//不然报"error": "invalid_scope"
//单个用 scope api
//多个用 scope api qq 中间用空格隔开
ClientSecrets = new[] { new Secret("secret".Sha256()),new Secret("luoye".Sha256()) }
}
};
}
}
向Program.cs 的代码中增加identityserver 4的服务及使用,代码删减后如下,
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
//注入入identityserver4
builder.Services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryClients(Config.GetClients()) //存储在内存中的客户端
.AddInMemoryApiScopes(Config.GetApiScopes()); //访问的返回
var app = builder.Build();
app.UseIdentityServer();
app.Run();
简单的授权中心就配置好了,我们现在启动
在浏览器中输入
http://localhost:5000/.well-known/openid-configuration
接下来我们用postman来获取token,请求路径
http://localhost:5000/connect/token
请求方法用post
参数如下
出现上面的结果,说明授权服务配置完成了。
2.建立资源服务器
创建一个项目叫webapi
把launchSettings.json 文件的启动端口改为5002
nuget 引入包 Microsoft.AspNetCore.Authentication.JwtBearer
配置服务
builder.Services.AddAuthentication("Bearer").AddJwtBearer("Bearer", options =>
{
options.Authority = "http://localhost:5000"; //授权中心地址
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
加入授权认证服务
我试过,如果直接用UseMvc那么用下面代码就就行,直接加入认证的就行
app.UseAuthentication();
app.UseMvc();
如果用的是UseEndpoints 需要认证授权一起加
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
});
以上只要不匹配,都会报错的,切记切记!!!!
然后我们建立一个api 控制器 ValuesController
在类前面加入Authorize的特性,如下
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
启动服务
访问地址 http://localhost:5002/api/values
会出现如下401 情况,说明访问权限受限
所以我们使用之前返回来的access_token再进行访问这个加在headers里面 key是 Authorization
值是Bearer 加个空格再把access_token
,如果出现如下情况,就说明成功了。
这样简单的客户端授权认证就完成了
源码地址
https://download.csdn.net/download/yu240956419/86722103 (免费免积分下载)