2015-08-24 22 views
6

Tôi đã sử dụng Azure Active Directory để bảo vệ API web của mình và tôi tạo một ứng dụng gốc trong cổng quản lý Azure. Ứng dụng gốc này về cơ bản là một ứng dụng web MVC và tôi sử dụng thư viện ADAL để nhận mã thông báo và gọi api bằng mã thông báo đó. Mã tôi đã sử dụng để nhận mã thông báo được hiển thị bên dưới:Đăng nhập Active Directory Azure với thư viện ADAL

AuthenticationContext ac = new AuthenticationContext(authority); 
AuthenticationResult ar = ac.AcquireToken(resourceID, clientID, redirectURI); 
string accessToken = ar.AccessToken; 

Bây giờ tôi cần phải đăng xuất và chuyển sang người dùng khác nhưng bằng cách nào đó thông tin xác thực người dùng được hệ thống nhớ. Tôi xóa bộ nhớ cache mã thông báo trong bối cảnh xác thực và yêu cầu đăng xuất api đăng như sau, trong đó *** là ID đối tượng thuê của tôi.

//Log out after api call 
ac.TokenCache.Clear(); 

string requestUrl = "https://login.windows.net/***/oauth2/logout"; 

var client = new HttpClient(); 
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl); 
var response = await client.SendAsync(request); 

Cuộc gọi api thành công nhưng đăng xuất không hoạt động. Tôi nên làm gì để đăng xuất và chuyển sang người dùng khác?

Trả lời

8

Tôi không nghĩ rằng điều này có hiệu quả. Bạn sẽ cần phải chuyển hướng người dùng đến URL đăng xuất để đăng xuất hoạt động.

Đây là cách bạn có thể tạo một URI logout:

https://login.microsoftonline.com/{0}/oauth2/logout?post_logout_redirect_uri={1}

đâu:

  • {0} - tên đầy đủ của Azure Active Directory của bạn ví dụ yourad.onmicrosoft.com hoặc id người thuê nhà.
  • {1} - URL của ứng dụng của bạn nơi người dùng phải được chuyển hướng trở lại sau khi đăng xuất hoàn tất. URL này phải được mã hóa đúng cách.
+0

Đây chính là điều tôi muốn, cảm ơn! –

+0

Tôi đã thử gọi tính năng đăng xuất này trong ADAL iOS, nhưng không đủ để ngăn ngoại lệ khi thay đổi tài khoản. Bất kỳ ai thành công trong việc đăng nhập/đăng xuất bằng ADALiOS và hai tài khoản khác nhau? –

1

Nếu mục tiêu của bạn là đăng nhập một người dùng khác, bạn không cần phải đăng xuất khỏi người dùng đầu tiên từ phiên của nó với Azure AD. Bạn có thể vượt qua PrompBehavior.Always trong cuộc gọi AcquireToken của bạn, để bạn sẽ được đảm bảo nhắc người dùng bằng cách thu thập thông tin xác thực sạch UX. Lưu ý: nếu bạn muốn xóa mọi dấu vết của người dùng đầu tiên khỏi ứng dụng, bạn có thể giữ mã dọn dẹp bộ nhớ cache mà bạn có. ADAL cho phép bạn giữ mã thông báo cho nhiều người dùng tho, do đó nếu ứng dụng của bạn là chức năng nhiều người dùng, điều này có thể hữu ích - bắt là nếu bạn làm như vậy, tại mỗi AcquireToken bạn sẽ phải chỉ định người dùng nào bạn muốn mã thông báo cho hoặc ADAL sẽ không biết cái nào cần trả lại. Nếu bạn không cần nhiều người dùng cùng một lúc, dọn dẹp bộ nhớ cache + PromptBehavior.Always vẫn là con đường dễ nhất.

+0

Bạn có thể xác nhận rằng điều này hiện đang hoạt động không? Tôi sử dụng thư viện ADAL của iOS, với yêu cầu AD_PROMPT_ALWAYS. Tôi không thể đăng nhập với bất kỳ người dùng nào khác sau đó người dùng đầu tiên tôi đã thử nghiệm với: (Lỗi ADAL: 19, Người dùng khác nhau đã được xác thực. Trạng thái: 2). http://stackoverflow.com/questions/32312710/adal-for-ios-exception-with-a-different-user-sign-on –

1

Bạn có thể làm điều này cho bộ nhớ cache rõ ràng:

 CookieManager cookieManager = CookieManager.getInstance(); 
     cookieManager.removeAllCookie(); 
     CookieSyncManager.getInstance().sync(); 
     mAuthContext.getCache().removeAll(); 
+0

Đây là một phần của giải pháp, họ đã thay đổi phần cuối cùng trong việc xóa Tokens khỏi cache: 'mAuthContext.getCache(). clear();' Nhưng giải pháp này thực sự hoạt động! – Vladimir

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