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ã.
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.ResponseHeaders
nơ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?