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'.
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:
2. Thêm ứng dụng mới :
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:
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:
5. Quay trở lại thư mục từ bước 1 và Thêm người dùng
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:
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
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ị
Dường như vào thời điểm này, thiết lập nên được hoàn thành.
Tạo ứng dụng bảng điều khiển mới.
Cài đặt NuGet gói "Microsoft.IdentityModel.Clients.ActiveDirectory"
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.
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. –
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
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 –