Helpex - Trao đổi & giúp đỡ Đăng nhập
6

Tôi đang cố gắng tìm một mục duy nhất viết tắt của tất cả các mục trong ngữ cảnh hiện tại, nhưng dường như tôi liên tục nhận được thông báo lỗi này:

Yêu cầu không thành công. Máy chủ từ xa trả về lỗi: (401) Không được phép.

Đầu tiên, tôi thiết lập mọi thứ để truy cập dịch vụ trao đổi:

var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;

AuthenticationResult authenticationResult = null;
AuthenticationContext authenticationContext = new AuthenticationContext(
            SettingsHelper.Authority, new model.ADALTokenCache(signInUserId));

authenticationResult = authenticationContext.AcquireToken(
            SettingsHelper.ServerName, 
            new ClientCredential(SettingsHelper.ClientId, SettingsHelper.ClientSecret));

ExchangeService exchange = new ExchangeService(ExchangeVersion.Exchange2013);
exchange.Url = new Uri(SettingsHelper.ServerName + "ews/exchange.asmx");
exchange.TraceEnabled = true;
exchange.TraceFlags = TraceFlags.All;
exchange.Credentials = new OAuthCredentials(authenticationResult.AccessToken);

Và sau đó tôi xác định mục tôi muốn nhận (theo ID):

ItemView view = new ItemView(5);
view.PropertySet = new PropertySet(BasePropertySet.IdOnly);

var tempId = id.Replace('-', '/').Replace('_', '+');
SearchFilter.IsEqualTo searchid = new SearchFilter.IsEqualTo(ItemSchema.Id, tempId);

Và cuối cùng nhưng không kém phần quan trọng, tôi cố gắng tìm kiếm mục này, trong các mục của tôi:

FindItemsResults<Microsoft.Exchange.WebServices.Data.Item> results = exchange.FindItems(WellKnownFolderName.Inbox, searchid, view);

Và đây là nơi mà lỗi của tôi xảy ra. Tôi đã thử nhiều cách khác để làm điều này, nhưng bất kể tôi làm gì, tôi vẫn nhận được sự cho phép.

Ai đó có thể hướng dẫn tôi theo cách chính xác, để giải quyết vấn đề này?

BIÊN TẬP

Tôi nhận được mã thông báo truy cập từ:

authenticationResult = authenticationContext.AcquireToken(
            SettingsHelper.ServerName, 
            new ClientCredential(SettingsHelper.ClientId, SettingsHelper.ClientSecret));

như tôi có thể thấy bằng cách gỡ lỗi mã.

EWS: “Máy chủ từ xa trả về lỗi (401) Trái phép”

Tuy nhiên, không có mã thông báo làm mới nào và tôi không biết liệu điều này có gì để nói không?

BIÊN TẬP

Tôi đã cố gắng gỡ lỗi tất cả các cách của tôi vào exchange.ResponseHeadersnơi tôi thấy điều này:

Mã thông báo truy cập được lấy bằng phương pháp xác thực quá yếu để cho phép truy cập ứng dụng này. Độ mạnh xác thực được trình bày là 1, yêu cầu là 2

Tôi đã giải mã JWT , vì đây là kết quả của tôi:

{
  typ: "JWT",
  alg: "RS256",
  x5t: "MnC_VZcATfM5pOYiJHMba9goEKY",
  kid: "MnC_VZcATfM5pOYiJHMba9goEKY"
}.
{
  aud: "https://outlook.office365.com/",
  iss: "https://sts.windows.net/d35f5b06-f051-458d-92cc-2b8096b4b78b/",
  iat: 1445416753,
  nbf: 1445416753,
  exp: 1445420653,
  ver: "1.0",
  tid: "d35f5b06-f051-458d-92cc-2b8096b4b78b",
  oid: "c5da9088-987d-463f-a730-2706f23f3cc6",
  sub: "c5da9088-987d-463f-a730-2706f23f3cc6",
  idp: "https://sts.windows.net/d35f5b06-f051-458d-92cc-2b8096b4b78b/",
  appid: "70af108f-5c8c-4ee4-a40f-ab0b6f5922e0",
  appidacr: "1"
}.
[signature]

Đi đâu từ đây?

6 hữu ích 5 bình luận 7.9k xem chia sẻ
6

Tôi đã gặp lỗi này khi sử dụng EWS trước đây "Mã thông báo truy cập được lấy bằng phương pháp xác thực quá yếu để cho phép truy cập ứng dụng này. Độ mạnh xác thực hiện tại là 1, yêu cầu là 2"

Những gì bạn cần làm là thực thi xác thực của bạn bằng chứng chỉ.

AuthenticationContext authContext = new AuthenticationContext(authority);

exchangeService.Credentials = new OAuthCredentials(authContext.AcquireToken("https://outlook.office365.com", new ClientAssertionCertificate(ConfigurationManager.AppSettings["ida:ClientId"], certificate)).AccessToken);

Phần quan trọng là xác định một ClientAssertionCertificate mới là ClientAssertion của bạn.

Bạn cũng sẽ phải sửa đổi tệp kê khai của Ứng dụng Azure Active Directory của mình.

Xem tham chiếu này (phần về "Định cấu hình chứng chỉ công khai X.509 cho ứng dụng của bạn"): https://msdn.microsoft.com/en-us/office/office365/howto/building-service-apps-in- văn phòng 365

6 hữu ích 4 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# asp.net mvc office365 exchangewebservices , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading