2012-03-27 19 views
0

我有一個問題,嘗試使用Profman爲新配置文件配置Exchange Online郵件服務會導致身份驗證提示,並且想知道是否有人以編程方式執行了類似的操作之前,以及他們是否能夠提供證書/防止提示顯示?使用Redemption配置新的Exchange Online電子郵件配置文件時禁止身份驗證提示

RDOSession profileSession = RedemptionLoader.new_RDOSession(); 

string proxy = String.Format("hknprd0204.outlook.com",machineName); 
string server = String.Format("hknprd0204.mailbox.outlook.com", machineName); 
string userName = "[email protected]"; 
string password = "[email protected]"; 

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) 

此外,與上面的代碼,如果我試圖打開之前在Outlook開口或沒有在提示高速緩存的憑證該帳戶的RDOStore,則拋出異常,說明該.OST是不是一個有效商店。

到目前爲止,我已經試過:

  • 添加憑據的RDOSession(如你可以在上面的代碼示例中看到)
  • 手動添加憑據之前運行的Windows憑據管理器此代碼(然後仍然在.Configure()調用中提示輸入憑據)。

任何提示或想法將不勝感激!

+0

閱讀Stephen Griffin的評論[這裏](http://blogs.msdn.com/b/stephen_griffin/archive/2009/08/11/auth-and-check-names.aspx) – pcunite 2012-06-02 16:04:43

回答

0

Outlook使用憑證高速緩存,您可以使用RDOSession.Credentials訪問和預填充憑據: http://www.dimastr.com/redemption/rdocredentials.htm 確保指定cpWindowsLogonSession,使其到Outlook(不只是贖回)可見。

+0

嗨德米特里,創建和記錄在RDOSession中似乎仍然提示輸入憑據:我在profiles.Add(「MyNewProfile」)後放置了以下代碼: RDOSession session = RedemptionLoader.new_RDOSession(); session.Credentials.Add(「*。onmicrosoft.com」,userName,password,rdoCredentialType.ctGeneric,rdoCredentialPersist.cpWindowsLogonSession); session.Credentials.Add(「*。outlook.com」,userName,password,rdoCredentialType.ctGeneric,rdoCredentialPersist.cpWindowsLogonSession); 它仍然會提示輸入newService.Configure()的憑據... – 2012-03-28 03:31:26

+0

查看http://www.dimastr.com/redemption/profiles.htm上的示例,以創建新配置文件並添加交換服務器,有一條評論說''注意:域名登錄對話框將始終顯示爲 '如果您當前沒有登錄到同一個域名「 - 這意味着Profman.Service.Configure()僅適用於域憑證? (最後一件事,當我用上面的原始代碼提示憑據時,打開RDOStore會引發MAPI_E_UNCONFIGURED,除非我在使用前檢查「保存密碼」或打開Outlook) – 2012-03-28 03:35:21

相關問題