Tôi đang cố định cấu hình IdentityServer4 bằng docker nhưng tôi không thể làm cho nó hoạt động được. Để bắt đầu, tôi đã Client dụ Credential của tài liệu máy chủ sắc: Protecting an API using Client CredentialsIdentity Server 4 và docker
IdentityServer
Hosted trên cổng 5000
WebAPI
Hosted trên cổng 5001
Trong Configure
phương pháp của các tập tin Startup.cs
của WebApi của tôi Tôi đã làm như sau (vấn đề có thể ở đây):
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://web:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
Khách hàng
Và client
// Everything is fine here...
var disco = await DiscoveryClient.GetAsync("http://localhost:5000");
var tokenClient = new TokenClient(disco.TokenEndpoint, "client", "secret");
var tokenResponse = await tokenClient.RequestClientCredentialsAsync("api");
// This does not work
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var response = await client.GetAsync("http://localhost:5001/identity");
Vấn đề có lẽ là trong WebAPI tôi:
1) Nếu tôi đặt quyền localhost: 5000, tôi nhận được một máy chủ nội bộ lỗi: "Không thể lấy cấu hình từ: 'http://localhost:5000/.well-known/openid-configuration'" có ý nghĩa vì localhost: 5000 không rõ trong vùng chứa này
2) Nếu tôi đặt quyền thành http://web:5000 Tôi nhận được lỗi ủy quyền: "Xác thực nhà phát hành không thành công. Tổ chức phát hành: 'http://localhost:5000'. Không phù hợp: validationParameters.ValidIssuer: 'http://web:5000' hoặc validationParameters.ValidIssuers "mà cũng có ý nghĩa nhưng tôi không biết nếu nó có thể thay đổi tên cơ quan? Tôi cũng đã cố gắng để thiết lập các IssuerUri
trong dự án IdentityServer nhưng nó didn ' t giúp đỡ
Làm như vậy phá vỡ phần đầu tiên của tôi client: var disco = đang chờ DiscoveryClient.GetAsync ("http: // localhost: 5000"); có ngoại lệ sau: Lỗi = "Tên tổ chức phát hành không khớp với quyền: foo" 'Xem bản chỉnh sửa của tôi để biết thêm thông tin – Bidou
@Bidou bạn có chắc đó là dòng chính xác không? 'DiscoveryClient.GetAsync' chỉ cần một yêu cầu GET và phân tích một phản hồi. Và sau khi tên tổ chức phát hành thay đổi, tất cả các mã thông báo phải được thay thế bằng mã thông báo mới. –
Thực ra nó hơi mệt. Nếu tôi kiểm tra 'DiscoveryResponse' được trả về bởi' GetAsync', tôi có thể thấy thuộc tính 'Raw' có tập đáp ứng json của nó (ví dụ,' tổ chức phát hành' cũng như 'tokenendpoint' đang ở đó) nhưng thuộc tính' Lỗi' chứa thông báo được đề cập ở trên "Tên tổ chức phát hành không khớp với quyền: foo". Thuộc tính TokenEndpoint là null (ngay cả khi nó nằm trong json thô) và sau đó một NullPointerException xảy ra vì dòng tiếp theo sử dụng thuộc tính này để intanciated TokenClient .... – Bidou