【问题标题】:Programmatically get EWS accesstoken以编程方式获取 EWS 访问令牌
【发布时间】:2016-04-28 11:24:17
【问题描述】:

我有一个有效的 EWS 连接,但目前我每次停止应用程序时都必须填写我的用户名和密码。最终,许多不同的用户将使用该应用程序。有没有办法以编程方式获取可以存储在本地存储中的访问令牌? (我不想保存密码)

    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);

    ExchangeCredentials credentials = new WebCredentials(username, password);
    service.setCredentials(credentials);

    service.setUrl(new URI("https://domain/EWS/Exchange.asmx"));

【问题讨论】:

    标签: android token exchangewebservices


    【解决方案1】:

    这称为模拟(邮件服务器管理员必须运行 power shell 命令才能将超级用户权限分配给指定的邮件帐户)。

    这里是链接https://msdn.microsoft.com/en-us/library/office/dd633680(v=exchg.80).aspx

    这里还有一个工作示例,说明了我如何为数百名用户使用模拟。 您需要将用户名存储在哈希集或字典中,而不是访问令牌(EWS 中没有访问令牌)。

    Private _ExchangeServicesMainThread As New Dictionary(Of String, ExchangeService)
    Private _UserIdState As New Dictionary(Of String, Integer)
    Private _Connections As New Dictionary(Of String, StreamingSubscriptionConnection)
    Private _Subscriptions As New Dictionary(Of String, StreamingSubscription)
    
    Private Function InitializeService(pUsername As String) As ExchangeService
        Dim oExService As ExchangeService
        Dim strEmailAddress As String = pUsername & config.MailDomain
        Dim strAdminEmailAddress As String = config.ExchangeServerAdminUserName & config.MailDomain
    
            oExService = New ExchangeService(config.ExchangeVersion)
            oExService.UseDefaultCredentials = False
            oExService.Url = New Uri(config.SecureHTTP & config.EmailServer & config.ExchangeManagedAPIEndpoint)
            oExService.Credentials = New Net.NetworkCredential(config.ExchangeServerAdminUserName, config.ExchangeServerAdminPass, config.ActiveDirectoryDomain)
            oExService.ImpersonatedUserId = New ImpersonatedUserId(ConnectingIdType.SmtpAddress, strEmailAddress)
    
            Return oExService
    End Function
    

    假设您有一个包含所有用户的已初始化字典,然后循环遍历您的字典,以便为每个用户分配一个交换服务并将此用户名/交换服务存储在一个新字典中

        For Each strUserName As String In _UserIdDictionary.Keys
            _ExchangeServicesMainThread.Add(strUserName, InitializeService(strUserName))
        Next
    

    【讨论】:

    • 感谢您的回答!糟糕的是,他们没有访问令牌。我无法以管理员身份访问交易所,所以这对我来说不是一个选择。知道没有访问令牌是有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多