Запретить проверку подлинности при настройке нового профиля электронной почты Exchange Online с помощью погашения - PullRequest
0 голосов
/ 27 марта 2012

У меня есть проблема, когда попытка настроить почтовую службу Exchange Online для нового профиля с использованием Profman вызывает запрос аутентификации, и мне было интересно, если кто-то делал что-то подобное программно ранее, и могли ли они предоставить учетные данные / запретить отображение подсказки?

RDOSession profileSession = RedemptionLoader.new_RDOSession();

string proxy = String.Format("hknprd0204.outlook.com",machineName);
string server = String.Format("hknprd0204.mailbox.outlook.com", machineName);
string userName = "demo@pkstest.onmicrosoft.com";
string password = "P@ssw0rds";

profileSession.Credentials.Add(proxy, userName, password, CredentialPersist: rdoCredentialPersist.cpWindowsLogonSession);
profileSession.Credentials.Add(server, userName, password, CredentialPersist: rdoCredentialPersist.cpWindowsLogonSession);

newProfile = profiles.Add("ExchangeOnline");
newProfile.GlobalProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);
newProfile.GlobalProfSect.set_Item((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName);

var newService = newProfile.Services.Add("MSEMS", "Microsoft Exchange", false);

ProfMan.PropertyBag properties = (ProfMan.PropertyBag)Activator.CreateInstance(Type.GetTypeFromProgID("ProfMan.PropertyBag"));

properties.Add((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);
properties.Add((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName);
properties.Add((int)Redemption.MAPITags.PR_PROFILE_HOME_SERVER, server);

properties.Add((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_NAME, userName);
properties.Add((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_SERVER, server);

properties.Add((int)Redemption.MAPITags.PR_ROH_FLAGS, 47);
properties.Add((int)Redemption.MAPITags.PR_ROH_PROXY_AUTH_SCHEME, Constants.RedemptionPropertyTags.ROHAUTH_BASIC);
properties.Add((int)Redemption.MAPITags.PR_ROH_PROXY_PRINCIPAL_NAME, "msstd:outlook.com");
properties.Add((int)Redemption.MAPITags.PR_ROH_PROXY_SERVER, proxy);
properties.Add((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE);

properties.Add((int)Redemption.MAPITags.PR_PROFILE_UI_STATE, 16640);

newService.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);

for (int i = 1; i <= newService.Providers.Count; i++)
{
    ProfMan.IProvider provider = newService.Providers.get_Item(i);
    switch (provider.ResourceType)
    {
        case 33:        //Microsoft Exchange Message Store  todo: constants these
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_SERVER, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_DISPLAYNAME_SET, 1);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE);
            break;
        case 35:        //Exchange Directory Service
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE);
            break;
        case 36:        //Exchange Transport
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_SERVER, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE);
            break;
        default:        //0 = MSEMS         This is the provider that is causing the authentication prompt.
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_DISPLAY_NAME, userName);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_INTERNET_CONTENT_ID, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_HOME_SERVER, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_NAME, userName);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_UNRESOLVED_SERVER, server);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_PROXY_PRINCIPAL_NAME, "msstd:outlook.com");
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_PROXY_SERVER, proxy);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_PROXY_AUTH_SCHEME, Constants.RedemptionPropertyTags.ROHAUTH_BASIC);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_ROH_FLAGS, 
                    Constants.RedemptionPropertyTags.ROHFLAGS_USE_ROH + 
                    Constants.RedemptionPropertyTags.ROHFLAGS_SSL_ONLY +
                    Constants.RedemptionPropertyTags.ROHFLAGS_MUTUAL_AUTH + 
                    Constants.RedemptionPropertyTags.ROHFLAGS_HTTP_FIRST_ON_SLOW + 
                    Constants.RedemptionPropertyTags.ROHFLAGS_HTTP_FIRST_ON_FAST);
            provider.ProfSect.set_Item((int)Redemption.MAPITags.PR_PROFILE_CONFIG_FLAGS, Constants.RedemptionPropertyTags.CONFIG_OST_CACHE_PRIVATE);
            break;
    }
}

newService.Configure(0, 0, properties);   //Prompts for authentication (and if credentials not cached in resultant prompt, when attempting to access the RDOStore later causes errors)

Кроме того, с помощью приведенного выше кода, если я пытаюсь открыть RDOStore для учетной записи до открытия в Outlook или без кэширования учетных данных в приглашении, создается исключение, указывающее, что .OST не является допустимым хранилищем.

Пока что пробовал:

  • добавление учетных данных в RDOSession (как вы можете видеть в приведенном выше примере кода)
  • добавление учетных данных вручную в диспетчер учетных данных Windows перед запуском этого кода (который затем запрашивает учетные данные при вызове .Configure ()).

Любые советы или идеи будут с благодарностью!

1 Ответ

0 голосов
/ 27 марта 2012

Outlook использует кэш учетных данных, вы можете получить к нему доступ с помощью RDOSession.Credentials и предварительно заполнить учетные данные: http://www.dimastr.com/redemption/rdocredentials.htm Убедитесь, что вы указали cpWindowsLogonSession, чтобы сделать его видимым для Outlook (а не только для погашения).

...