проверка подлинности службы по лазурной рекламе и EWS - PullRequest
0 голосов
/ 13 ноября 2018

Я создаю демон / неинтерактивную службу для использования EWS в O365 в качестве конкретного пользователя. Чтобы связаться с EWS через OAUTH2.0, я пытаюсь правильно зарегистрировать приложение и пройти аутентификацию на AAD. Желательно, чтобы я использовал аутентификацию на основе сертификатов, но я не получил этого.

Код ниже (работает):

    static void Main(string[] args)
    {
        string tenant = "redacted.onmicrosoft.com";
        string authority = "https://login.microsoftonline.com/" + tenant;
        string clientId = "44964df2-3333-2222-1111-redcated";
        string resource = "https://outlook.office365.com";
        string clientSecret = "redacted";
        string username = "username@redacted.onmicrosoft.com";
        string password = "redacted";

        AuthenticationResult authenticationResult = null;
        AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);

        var userCred = new UserPasswordCredential(username, password);
        ClientCredential clientCred = new ClientCredential(clientId, clientSecret);

        string errorMessage = null;
        try
        {
            Console.WriteLine("Trying to acquire token");
            authenticationResult = authenticationContext.AcquireTokenAsync(resource, clientId, userCred).Result;
        }
        catch (AdalException ex)
        {
            errorMessage = ex.Message;
            if (ex.InnerException != null)
            {
                errorMessage += "\nInnerException : " + ex.InnerException.Message;
            }
        }
        catch (ArgumentException ex)
        {
            errorMessage = ex.Message;
        }
        if (!string.IsNullOrEmpty(errorMessage))
        {
            Console.WriteLine("Failed: {0}" + errorMessage);
            return;
        }
        Console.WriteLine("\nMaking the protocol call\n");
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
        service.Credentials = new OAuthCredentials(authenticationResult.AccessToken);
        service.TraceEnabled = true;
        service.TraceFlags = TraceFlags.All;
        service.Url = new Uri(resource + "/EWS/Exchange.asmx");
        EmailMessage email = new EmailMessage(service);
        email.ToRecipients.Add("redacted@gmail.com");
        email.Subject = "HelloWorld from EWS";
        email.Body = new MessageBody("Test from EWS");
        email.Send();
    }

Этот код работает как задумано, однако мне также необходимо убедиться, что он безопасен / соответствует передовой практике.

При использовании кода я зарегистрировал приложение как "Native", однако позже обнаружил, что в руководстве Micrsofts сказано, что вы не должны использовать client_secret с приложениями Native, и секретный код клиента фактически не используется кодом ни в его текущая форма.

Учитывая вариант использования (неинтерактивная служба аутентифицируется как один конкретный пользователь), это правильный подход?

Что следует учитывать при регистрации службы в AAD?

1 Ответ

0 голосов
/ 14 ноября 2018

Позже я обнаружил, что руководство Micrsofts говорит, что вы не должны использовать client_secret с родными приложениями

Client_secret нельзя использовать в собственном приложении (общедоступный клиент), поскольку client_secrets нельзя надежно хранить на устройствах. Это требуется для веб-приложений и веб-API (всех конфиденциальных клиентов), которые могут безопасно хранить client_secret на стороне сервера.

С учетом варианта использования (неинтерактивная служба аутентифицируется как единая конкретный пользователь), это правильный подход?

Да. Поток предоставления учетных данных клиента OAuth 2.0 позволяет веб-службе (конфиденциальному клиенту) использовать свои учетные данные вместо того, чтобы выдавать себя за пользователя, для аутентификации при вызове другой веб-службы. В то время как поток предоставления кода авторизации Oauth 2.0 и OpenId Connect олицетворяют пользователя, которому требуется вход в систему.

Что следует учитывать при регистрации службы в AAD?

Вы можете прочитать это doc , в нем будет представлена ​​основная структура службы AAD.

...