2016-08-30 42 views
9

Tôi đang xây dựng một ASP.NET Web API Lõi sẽ được bảo đảm bằng AD Azure (bảo đảm qua app.UseJwtBearerAuthentication)ASP.NET MVC Lõi Authenticate tài khoản để Azure AD sau đó tạo JWT Bearer Mã gọi Web API

Tôi đang xây dựng bộ điều khiển ASP.NET Core MVC (được bảo đảm bằng app.UseOpenIdConnectAuthentication) gọi là WebAPI.

Tôi đang cố gắng triển khai quy trình xác thực như được mô tả trong hướng dẫn của Hướng dẫn triển khai khách hàng cơ bản của OpenID Connect OpenID Connect Basic Customer Guide.

Mã mẫu tôi tìm cho mẫu này.

một ví dụ là ở đây:

/active-directory-dotnet-webapp-webapi-openidconnect/blob/master/TodoListWebApp/App_Start/Startup.Auth.cs)

là sử dụng .NET (không phải .NET Core) với OWIN.

Bạn sử dụng phương thức OnAuthorizationCodeReceived và gọi số AcquireTokenByAuthorizationCodeAsynch để nhận mã thông báo bạn sẽ sử dụng trong yêu cầu của mình cho WebAPI.

Khi tôi cố gắng xây dựng các mô hình tương tự trong ASP.NET MVC Lõi, tôi thấy như sau:

  1. Khi tôi cấu hình ứng dụng MVC của. UseOpenIdConnectAuthentication với mặc định, sau đó tôi có thể đăng nhập vào hệ thống, nhưng tôi không nhận lại mã ủy quyền. Sự kiện gây cháy cho tôi là sự kiện OnTokenValidated thay vì sự kiện AuthorizationCodeReceived được hiển thị ở trên. Nó có một bản sắc và một mã thông báo, rất tuyệt vời.
  2. Khi tôi định cấu hình ứng dụng của MVC. UseOpenIdConnectAuthenticationresponse-type = “code”, sau đó tôi nhận lại mã, sự kiện cháy OnAuthorizationCodeReceived đã xảy ra nhưng tôi không nhận được thông tin nhận dạng.

[Tệp kê khai ứng dụng của tôi đã được thiết lập cho oauth2AllowImplicitFlow: true. Trong trường hợp này, việc xác thực người dùng và tạo mã thông báo được nén thành một bước duy nhất, không an toàn như tôi cần, vì vậy tôi đặt thành false.]

Sau khi điều tra thêm, tôi đã biết được rằng Asp.Net Core cơ sở hạ tầng được thiết kế để xử lý nhiều mục xác thực middleware riêng biệt, và rằng

Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs

được mã hoá để ném một lỗi 'không cho phép' nếu bạn cố gắng sử dụng SignIn quy trình làm việc với cấu hình JwtBearer.

Vì vậy, có vẻ như tôi sẽ phải tuân theo cách tiếp cận nhiều phần trung gian đó.Một phần mềm trung gian dựa trên cookie cho thông tin đăng nhập và một phần mềm trung gian dựa trên bearer-token cho mã thông báo mang để truy cập các dịch vụ được liên kết với Ứng dụng này. (thay vì mô hình từ OWIN mẫu nơi cuộc gọi đến dịch vụ được thực hiện sau khi nhận được mã xác thực)

Tính năng này (nhiều middlewares xác thực) được mô tả trong https://docs.asp.net/en/latest/security/authorization/limitingidentitybyscheme.html

Có ai có một ví dụ cho điều này? Hay tôi vẫn nghĩ về điều này sai?

+1

Bạn có gì để chia sẻ về chủ đề này không? Tôi đang cố gắng để làm gần như giống nhau và tôi không thể tìm thấy bất kỳ mẫu tốt cho chủ đề này bằng cách sử dụng ASP.Net Core. – zuckerthoben

Trả lời

0

Nếu bạn cần có được danh tính cùng với mã, bạn nên chỉ định điều này với yêu cầu của mình =>response_type=code+id_token.

Sau khi truy xuất cả hai, tôi hy vọng bạn sẽ có thể đặt cookie cho người dùng của mình và cũng để yêu cầu xác thực và mã thông báo ứng dụng khách.

Tôi khá chắc chắn rằng kịch bản chính xác được mô tả trong Authorize access to web applications using OpenID Connect and Azure Active Directory.

Các vấn đề liên quan