Trong bài viết này, mình sẽ update lại một số config cho Identity Server khi sử dụng .NET Core 3 dựa trên grant type Resource Owner Password Credentials.
Các bạn có thể tham khảo cách thiết lập Identity Server ở các bài viết trước của mình:
https://nhatkyhoctap.blogspot.com/2017/08/tim-hieu-ve-identityserver-4.html
https://nhatkyhoctap.blogspot.com/2017/08/identity-server-4-bao-ve-web-api-bang.html
Trong môi trường Dev, ở phiên bản .NET Core 1.x, bạn sẽ sử dụng phương thức:
Từ .NET Core 2.x, điều này sẽ thay đổi và bạn sẽ cần phương thức mở rộng AddDeveloperSigningCredential ().
VD:
Các bạn có thể tham khảo cách thiết lập Identity Server ở các bài viết trước của mình:
https://nhatkyhoctap.blogspot.com/2017/08/tim-hieu-ve-identityserver-4.html
https://nhatkyhoctap.blogspot.com/2017/08/identity-server-4-bao-ve-web-api-bang.html
Đăng ký Self-sign certificate trong môi trường dev
Authorization Server sẽ mã hóa token bằng key. Resource Server xác minh rằng tính toàn vẹn của mã thông báo bằng một khóa. Chúng cùng nhau tạo thành một cặp khóa bất đối xứng (ví dụ: public/private). Theo mặc định, IdentityServer sẽ xuất bản public key để xác minh mã thông báo trên điểm cuối /.well- Unknown / openid-configuration.Trong môi trường Dev, ở phiên bản .NET Core 1.x, bạn sẽ sử dụng phương thức:
AddTemporarySigningCredential()
Từ .NET Core 2.x, điều này sẽ thay đổi và bạn sẽ cần phương thức mở rộng AddDeveloperSigningCredential ().
services.AddIdentityServer()
.AddInMemoryClients(Clients.Get())
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddTestUsers(Users.Get())
.AddDeveloperSigningCredential();
Từ Identity Server 4.1.2 trở về sau, bạn cần thêm Scope thêm vào services
services.AddIdentityServer()
.AddInMemoryClients(Clients.Get())
.AddInMemoryApiScopes(Models.Resources.GetApiScopes())
.AddInMemoryIdentityResources(Models.Resources.GetIdentityResources())
.AddInMemoryApiResources(Models.Resources.GetApiResources())
.AddTestUsers(Users.Get())
.AddDeveloperSigningCredential();
API Resources
Kiểu dữ liệu cho Scope là stringpublic static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource> {
new ApiResource {
Name = "customAPI",
DisplayName = "Custom API",
Description = "Custom API Access",
UserClaims = new List<string> {"role"},
ApiSecrets = new List<Secret> {new Secret("scopeSecret".Sha256())},
Scopes = new List<string> {
new string("customAPI.read"),
new string("customAPI.write")
}
}
};
}
Link download Quickstart UI
Bạn mở PowerShell và gõ lệnh:
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/IdentityServer/IdentityServer4.Quickstart.UI/master/getmaster.ps1'))
Validate token
Thay vì sử dụng hàm UseIdentityServerAuthentication() trong Startup.Configure(), bạn sử dụng hàm AddAuthentication() và setup trong ConfigureServices().VD:
public void ConfigureServices(IServiceCollection services)
{
// setup ID4
var athorizationServerUrl = Configuration.GetSection("Blog:AuthorizeServer");
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddIdentityServer()
.AddInMemoryClients(Clients.Get())
.AddInMemoryIdentityResources(Resources.GetIdentityResources())
.AddInMemoryApiResources(Resources.GetApiResources())
.AddTestUsers(Users.Get())
.AddDeveloperSigningCredential();
//setup token validatioin
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddIdentityServerAuthentication(options =>
{
// base-address of your identityserver
options.Authority = athorizationServerUrl.Value;
// name of the API resource
options.ApiName = "customAPI";//your api name
options.RequireHttpsMetadata = false;
});
}
Từ các phiên bản sau này của ID4, bạn phải tự viết phương thức kiểm tra Token
Nhận xét
Đăng nhận xét