一、引用Nuget:IdentityServer4  最新版本 4.1.2

二、添加配置:

public class Config
{

/// <summary>
/// 定义资源
/// </summary>
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1", "我的第一个API"),
new ApiResource("api2", "我的第2个API")
};
}

/// <summary>
/// 主要用于为Client提供accesstoken中的scope声明的值。
/// client中 AllowedScopes 配置的值一定要在这里存在。不然就报错(invalid_scope)。
/// </summary>
/// <returns></returns>
public static IEnumerable<ApiScope> GetApiApiScopes()
{
return new List<ApiScope>
{
new ApiScope("api1", "我的第一个API"),
new ApiScope("demo-api", "我的第2个API")
};
}


/// <summary>
/// 定义访问的资源客户端
/// </summary>
/// <returns></returns>
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client{
ClientId="client",//定义客户端ID
ClientSecrets=
{
new Secret("secret".Sha256())//定义客户端秘钥
},
AllowedGrantTypes=GrantTypes.ResourceOwnerPassword,//授权方式为用户密码模式授权,类型可参考GrantTypes枚举
AllowedScopes={ "api1" }//允许客户端访问的范围,必须在ApiScope里定义

}
};
}

/// <summary>
/// 这个方法是来规范tooken生成的规则和方法的。一般不进行设置,直接采用默认的即可。
/// </summary>
/// <returns></returns>
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new IdentityResource[]
{
new IdentityResources.OpenId()
};
}

}

 

三、Startup里:

public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{

var builder = services.AddIdentityServer()//注册服务
.AddInMemoryApiScopes(Config.GetApiApiScopes())//配置scope
.AddInMemoryApiResources(Config.GetApiResources())//配置类定义的授权资源
.AddInMemoryClients(Config.GetClients())//配置类定义的授权客户端
.AddTestUsers(new List<TestUser> {
new TestUser {
Username = "Admin", Password = "123456", SubjectId = "001", IsActive = true
}
}
);
//模拟测试用户,这里偷懒了,用户可以单独管理,最好不要直接在这里New
builder.AddDeveloperSigningCredential();
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "IdS4Test", Version = "v1" });
});
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "IdS4Test v1"));
}
app.UseIdentityServer();//添加中间件
app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}

Postman测试下:

.Net5中使用IdentityServer4的简单方法,以及坑_html

 

 

 

网上的一些教程,使用的是3.*的版本,若按照上面的教程来开发,但是使用的是最新版本的ids4,则会报错 “invalid_request”,“invalid_scope”,等问题,我的代码已修复这个问题。排错过程参考了一些文章:

​http://www.identityserver.com.cn/Home/Detail/shiyongpingzhengbaohuapi   ​

​https://github.com/jonny-xhl/identityserver4-simple/issues/1​

 学一个东西,需要先使用起来,用多了,就慢慢学会了。

 

 作者:沐雪

文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者所有,如需转载恳请注明。

​​​ 为之网-热爱软件编程 http://www.weizhi.cc/​