Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以避免在仍然能够进行身份验证(针对EWS)的情况下存储MS Exchange凭据?_C#_Exchange Server_Exchangewebservices - Fatal编程技术网

C# 我是否可以避免在仍然能够进行身份验证(针对EWS)的情况下存储MS Exchange凭据?

C# 我是否可以避免在仍然能够进行身份验证(针对EWS)的情况下存储MS Exchange凭据?,c#,exchange-server,exchangewebservices,C#,Exchange Server,Exchangewebservices,我正在构建一个在用户的Exchange Server帐户(支持版本2007-2013)和应用程序之间同步数据的应用程序 应用程序不能使用模拟(至少在典型情况下不能),因为用户可能位于任意数量的域和exchange服务器上 我知道我必须先询问他们的用户名/电子邮件地址和密码。但是,如果不需要,我真的不想负责存储这些凭据(即使它们是加密的,我也不想) 我不确定该问些什么问题,所以我选择这些: Exchange Server如何进行身份验证?用户的凭据是按原样直接发送到服务器,还是在通过网络发送之前将

我正在构建一个在用户的Exchange Server帐户(支持版本2007-2013)和应用程序之间同步数据的应用程序

应用程序不能使用模拟(至少在典型情况下不能),因为用户可能位于任意数量的域和exchange服务器上

我知道我必须先询问他们的用户名/电子邮件地址和密码。但是,如果不需要,我真的不想负责存储这些凭据(即使它们是加密的,我也不想)

我不确定该问些什么问题,所以我选择这些:

Exchange Server如何进行身份验证?用户的凭据是按原样直接发送到服务器,还是在通过网络发送之前将其散列在一起?如果它们是散列的,我如何获取/生成此散列以便在后续身份验证中重复使用

Exchange Server是否发送某种身份验证令牌,这些令牌可以在以后重复使用(直到密码更改或无效为止)


如果您知道问题的解决方案,但这些问题的答案无法解决,请提供解决方案。

System.Net.CredentialCache应该可以满足您的需要。
WebCredentials
System.Net.NetworkCredential
的包装器。根据连接类型/域ect,您应该能够利用
System.Net.CredentialCache.DefaultNetworkCredentials
System.Net.CredentialCache.DefaultCredentials

Active directory联合身份验证服务正适合此类任务。您可以阅读。

正如Kirill所提到的,ADFS 2.0是完成任务的最佳解决方案之一。您还可以研究其他SSO实现。虽然SSO实现的主要目标是为多个应用程序维护单一登录状态(从而减少每个应用程序的多个登录提示),但您的一些应用程序目标似乎是相关的。在开始sso实现之前,请彻底研究所有折衷方案,因为在实现过程中涉及的复杂性很小。如果您考虑将来将多个应用程序与exchange服务器集成,则SSO最适合

要回答您的一些问题(按照相同的顺序-考虑使用ADFS 2.0的SSO场景),请执行以下操作:

  • exchange server的身份验证将通过ADFS 2.0(它提供安全令牌(STS服务)——在使用AD/main Directory服务进行身份验证后,通过ADFS 2.0完成。所有通信都经过加密,令牌签名证书用于完整性和机密性
  • 可以根据需要配置和重用ADFS 2.0发送的安全令牌的生存期。有关更多详细信息,请参阅
    您还可以将ADFS 2.0(联合服务)配置为仅向应用程序发送相关的声明值(如用户名和电子邮件地址),从而提高数据安全性。

    也许您应该查看此链接,希望它能为您提供解决问题的新思路:)

    因为如果我正确地理解了信息,你可能会过虑了问题,但我没有任何经验,所以我也可能完全错了 如果您无法在服务器上配置任何内容,则没有自动生成的令牌可供使用。这是不幸的,但您面临着与web浏览器相同的一般问题——保存密码。 值得注意的是,任何身份验证都需要通过SSL(一种
    https
    连接)进行,以防止第三方监听身份验证

    密码存储思路: 我的建议是,在存储密码时要有创意。您可以使用密钥加密算法,然后使用哈希生成密钥,让您任意选择密钥中的内容。您至少需要3条信息:设备特有的信息、应用特有的信息和exchange服务器特有的信息

    例如:

    • 设备提供的唯一id(该值是否特定于应用程序并不重要,只是它是一致的)
    • 编译到应用程序中的(长)信息字符串,可能键入安装特定的值,例如应用程序首次使用的时间
    • 目的地特有的东西,比如DNS名称和一些更具体的服务器信息
    如果您愿意向用户提供该选项,您可以拥有某种授权PIN,该PIN也将添加到数据中

    所有这些数据都放在一个字节数组中并进行散列。散列(或部分散列,或两次散列,取决于散列大小与密钥长度)然后用作密码加密的密钥

    您还可以在密码中包含一些检查信息,以便能够检查客户端是否正确解密了密码。(如果散列了错误的数据,则会生成错误的密钥,解密结果也会错误)


    值得注意的是,用于放入散列的所有信息都需要存储在设备上,这就是为什么我建议使用Pin来授权帐户的使用

    这将是你在后台进行的批量同步,还是用户进入你的应用程序后会启动的同步?在后台进行批量同步。管理员访问是否可以工作?不。我没有也不会访问用户的Exchange服务器。您是否考虑过委派访问?