2016-05-06 20 views
7

Tôi đang thiết lập xác thực với Azure AD cho API REST API Web ASP.NET 2. Tôi muốn tất cả khách hàng có thể sử dụng tên người dùng & mật khẩu để xác thực với API REST. Tôi đã thiết lập Azure AD (các bước đầy đủ dưới đây, nhưng về cơ bản - đã tạo một thư mục, thêm người dùng, thêm ứng dụng, thêm vai trò vào ứng dụng trong tệp kê khai, người dùng được gán cho ứng dụng). Tuy nhiên, khi tôi cố gắng để kiểm tra thông qua một ứng dụng Console (mã đầy đủ ở phía dưới), tôi nhận được ngoại lệ:Ngoại lệ AD Azure - AADSTS50105 - "Người dùng đã đăng nhập không được gán vai trò cho ứng dụng"

Một ngoại lệ unhandled của loại 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException' xảy ra ở Microsoft.IdentityModel.Clients.ActiveDirectory.dll

Thông tin bổ sung: AADSTS50105: Người dùng đã đăng nhập '[email protected]' không được gán vai trò cho ứng dụng '8ed6bbe9-dce7-4bed-83af-aa5472ac4eef'.

enter image description here

Tôi đoán một cái gì đó cần được chỉnh sửa trong Manifest, nhưng tôi không biết.

Đây là mã:

using Microsoft.IdentityModel.Clients.ActiveDirectory; 
using System; 

namespace WebApiClientTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      const string authorityUri = "https://login.microsoftonline.com/azureadwebapitest.onmicrosoft.com/"; 
      const string resource = "https://azureadwebapitest.onmicrosoft.com/test"; 
      const string clientId = "8ed6bbe9-dce7-4bed-83af-aa5472ac4eef"; 
      const string userId = "[email protected]"; 
      const string password = "[REMOVED for StackOverflow post]"; 

      UserCredential credentials = new UserCredential(userId, password); 
      AuthenticationContext context = new AuthenticationContext(authorityUri); 
      var authresult = context.AcquireToken(resource, clientId, credentials); 
      Console.WriteLine("Access token: {0}", authresult.AccessToken); 
      Console.ReadLine(); 
     } 
    } 
} 

bước repro Full dưới đây:

1. Tạo mới Azure AD Directory:

enter image description here

2. Thêm ứng dụng mới :

enter image description here

enter image description here

3. Set "phân tài cần thiết để truy cập vào ứng dụng" để "YES". Đặt quyền ứng dụng "Đọc dữ liệu thư mục". Sao chép ID ứng dụng khách. Tiết kiệm:

enter image description here

4. Tải manifest. Chỉnh sửa tệp kê khai và thêm hai vai trò. Tải lên biểu hiện:

enter image description here

enter image description here

5. Quay trở lại thư mục từ bước 1 và Thêm người dùng

enter image description here

enter image description here

enter image description here

6. Mở trình duyệt mới thành https://account.activedirectory.windowsazure.com/ và đăng nhập với tư cách người dùng. Đổi mật khẩu.Chú ý không có ứng dụng có sẵn:

enter image description here

enter image description here

7. Quay trở lại Classic Portal. Gán người dùng cho vai trò generalclient trong Ứng dụng. Chú ý đến người dùng hiện được gán cho ứng dụng

enter image description here

enter image description here

enter image description here

8. Quay trở lại cổng thông tin tài khoản người dùng và làm mới. Bạn có thể phải làm mới một vài lần hoặc nhấp vào xung quanh. Chú ý việc áp dụng hiện nay được hiển thị

enter image description here

  1. Dường như vào thời điểm này, thiết lập nên được hoàn thành.

  2. Tạo ứng dụng bảng điều khiển mới.

  3. Cài đặt NuGet gói "Microsoft.IdentityModel.Clients.ActiveDirectory"

  4. Sao chép mã vào ứng dụng giao diện điều khiển (trên cùng của bưu điện), chèn mật khẩu của bạn vào "password" chuỗi, và Start Debugging:

Kết quả:

Một ngoại lệ unhandled của loại 'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException' xảy ra ở Microsoft.IdentityModel.Clients.Active Directory.dll

Thông tin bổ sung: AADSTS50105: Người dùng đã đăng nhập '[email protected]' không được chỉ định vai trò cho ứng dụng '8ed6bbe9-dce7-4bed-83af-aa5472ac4eef'.

mong đợi kết quả:

Các thẻ truy cập được ghi vào giao diện điều khiển đầu ra.

+0

Bạn có thể thay đổi một vai trò khác như 'Toàn cầu quản lý' và thử lại? Và nếu bạn đang sử dụng các nhóm, hãy tránh các nhóm lồng nhau, hãy thử sử dụng các nhóm cấp cao nhất. –

+0

Cảm ơn bạn đã trả lời. Không sử dụng nhóm. Đã thay đổi "ROLAN TỔ CHỨC" của người dùng trong cổng từ "Người dùng" thành "Quản trị toàn cầu" và vẫn nhận được cùng một ngoại lệ. Tôi cũng đã thử thêm "Quản trị viên toàn cầu" và "GlobalAdmin" vào "allowedMemberTypes" trong Tệp kê khai, nhưng đã nhận được lỗi khi cố gắng tải lên bằng một trong hai giá trị. – BlueSky

+0

bạn không thể đánh giá webapi bằng cách sử dụng clientid của webapi, webapi truy cập ứng dụng gốc là một giải pháp –

Trả lời

-1

Nếu bạn có một Web API được lưu trữ trong Azure và bạn muốn người dùng có thể sử dụng nó thì bạn cần một mã thông báo cho tài nguyên đó.

Vai trò sẽ được quảng cáo bởi Tài nguyên API Web chứ không phải Kiểm tra. Và sau khi được xác thực, mã thông báo truy cập tài nguyên sẽ có các vai trò trong đó API Web của bạn sau đó có thể sử dụng để cấp quyền truy cập.

Giả sử đây là KHÔNG Multi-thuê nhà

Trước tiên, bạn phải cung cấp các tài nguyên Web API và chỉnh sửa manifest để Vai trò hỗ trợ của nó. Điều này được thực hiện bằng cách sửa đổi khóa appRoles trong tệp kê khai. Sau đó, bạn cần cập nhật tệp kê khai oauth2Permissions để hỗ trợ quyền truy cập của người dùng được ủy quyền.Nhìn đây (điểm 5) để biết thông tin này https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-manifest/

Bây giờ, rằng API Web đã sẵn sàng, hãy vào tab cấu hình của nó và gán bất kỳ người sử dụng cho phép gọi nó là UserXYZ để nó cho một vai trò đặc biệt.

Tiếp theo, cung cấp Native Client application trong cùng một thư mục nơi API Web được cấp phép và trong Tab cấu hình -> Thêm ứng dụng, chọn Tài nguyên API Web của bạn và chọn hộp đó để truy cập được ủy quyền.

Quay trở lại ứng dụng thử nghiệm của bạn làm

var uc = new UserCredential(userName, userPassword); // This is UserXYZ creds 
var context = new AuthenticationContext(...); //Tenant Id must be correct 
result = context.AcquireToken("<Your Web API Resource App URI>", "<Your Native Client App Id>", uc); 
Các vấn đề liên quan