Я пытаюсь реализовать ограничение с помощью New-ApplicationAccessPolicy, чтобы запретить отправку электронных писем из любой учетной записи пользователя при использовании данной регистрации приложения. Но электронные письма и другие действия, связанные с чтением сообщений, все еще работают. Например, я не хочу, чтобы приложение могло отправлять или читать электронную почту для пользователя mateoj@iadbsec.onmicrosoft.com.
Если я проверяю разрешения в консоли PowerShell Exchange, это показывает, что доступ для этой комбинации пользовательского приложения отказано:
Test-ApplicationAccessPolicy -Identity mateoj@iadbsec.onmicrosoft.com -AppId f5990b66-5e57-4d29-b990-79580009fb7a</p>
<p>RunspaceId : 6800e63c-6ed3-40ca-a7b0-8aa114a3488a
AppId : f5990b66-5e57-4d29-b990-79580009fb7a
Mailbox : mateoj
MailboxId : 0b5221ff-c190-47c5-8c1c-50435b5abfee
MailboxSid : S-1-5-21-3773200467-1648347138-3333334462-20495337
AccessCheckResult : Denied
Но я все еще могу читать или отправлять электронные письма для этой учетной записи.
Пользователь уже согласен с разрешениями для предыдущей версии этого приложения в AD, но политика Exchange должна отклонять запросы.
User->Applicactions->Permissions">
Это исходный код:
string[] scopes = new string[] { "user.read" };
private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
{
AuthenticationResult authResult = null;
var app = App.PublicClientApp;
ResultText.Text = string.Empty;
TokenInfoText.Text = string.Empty;
var accounts = await app.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
try
{
authResult = await app.AcquireTokenSilent(scopes, firstAccount)
.ExecuteAsync();
}
catch (MsalUiRequiredException ex)
{
System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
try
{
authResult = await app.AcquireTokenInteractive(scopes)
.WithAccount(accounts.FirstOrDefault())
.WithParentActivityOrWindow(new WindowInteropHelper(this).Handle) // optional, used to center the browser on the window
.WithPrompt(Prompt.SelectAccount)
.ExecuteAsync();
}
catch (MsalException msalex)
{
ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
}
}
catch (Exception ex)
{
ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
return;
}
if (authResult != null)
{
ResultText.Text = await GetHttpContentWithToken(graphAPIEndpoint, authResult.AccessToken);
DisplayBasicTokenInfo(authResult);
this.SignOutButton.Visibility = Visibility.Visible;
}
}
public async Task<string> GetHttpContentWithToken(string url, string token)
{
var httpClient = new System.Net.Http.HttpClient();
System.Net.Http.HttpResponseMessage response;
try
{
var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, url);
//Add the token in Authorization header
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
response = await httpClient.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();
return content;
}
catch (Exception ex)
{
return ex.ToString();
}
}
Токен, который получает приложение, содержит не только запрошенные области "пользователя .read "но все области, на которые пользователь уже согласился:
"typ": "JWT",
"nonce": "0ehQiH41_yQ12B5YRoxiXQPSTNvNbcL8tgL5Rn2axhY",
"alg": "RS256",
"x5t": "YMELHT0gvb0mxoSDoYfomjqfjYU",
"kid": "YMELHT0gvb0mxoSDoYfomjqfjYU"
}.{
"aud": "00000003-0000-0000-c000-000000000000",
"iss": "https://sts.windows.net/35463e7c-329a-4bda-8176-329ba27c9300/",
"iat": 1587492891,
"nbf": 1587492891,
"exp": 1587496791,
"acct": 0,
"acr": "1",
"aio": "42dgYJgXuZKBP7Q/mOHxzc1NZ1VObFt+Jzhlg1hPSl1iBn+wRAEA",
"amr": [
"pwd"
],
"app_displayname": "ASP.NET Graph Tutorial",
"appid": "f5990b66-5e57-4d29-b990-79580009fb7a",
"appidacr": "0",
"family_name": "J",
"given_name": "Mateo",
"ipaddr": "100.15.106.170",
"name": "Mateo J",
"oid": "0b5221ff-c190-47c5-8c1c-50435b5abfee",
"platf": "3",
"puid": "10032000AF94C708",
"scp": "Calendars.Read email Mail.Read Mail.Send openid profile User.Read",
"sub": "7RUo9SosiVWj38mVDqx_TLjx9cke-9kXqlq-UzPydHk",
"tid": "35463e7c-329a-4bda-8176-329ba27c9300",
"unique_name": "mateoj@iadbsec.onmicrosoft.com",
"upn": "mateoj@iadbsec.onmicrosoft.com",
"uti": "BarWkwo_skyYDqHDUKYnAA",
"ver": "1.0",
"xms_st": {
"sub": "m0q26l-BwZKjl1W3FHV0jn1iRfCEAiIdE4BNu3gQ_F8"
},
"xms_tcdt": 1586707572
}.[Signature]
Это разрешения, которые имеет AppRegistration:
Может быть, кто-то может дать ключ к пониманию того, почему приложение все еще может отправлять и читать электронные письма, даже если политика доступа к приложению указывает, что для этого пользовательского приложения в доступе отказано.
Заранее спасибо.