我正在尝试设置一个 C# 控制台应用程序,该应用程序可以从通用 AD 帐户通过 Skype for Business Online 向用户发送通知/提醒。前几天我很高兴看到根据此页面,现在 Skype for Business Online 支持 UCWA:https ://msdn.microsoft.com/en-us/library/office/mt650889.aspx 。
我一直在尝试按照本教程进行设置:https ://msdn.microsoft.com/en-us/library/office/mt590891(v=office.16).aspx 。到目前为止,我真的没有太多运气......我在 Azure AD 中设置了我的应用程序,但我陷入了该文章的“使用隐式授权流请求访问令牌”步骤(不是 100% 确定我是在此之前采取正确的行动)......到目前为止我有这个:
string clientId = "xxxxxxxx"
string resourceUri = "https://webdir.online.lync.com";
string authorityUri = "https://login.windows.net/common/oauth2/authorize";
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
UserCredential cred = new UserCredential("username", "password");
string token = authContext.AcquireToken(resourceUri, clientId, cred).AccessToken;
var poolReq = CreateRequest("https://webdir.online.lync.com/autodiscover/autodiscoverservice.svc/root", "GET",token);
var poolResp = GetResponse(poolReq);
dynamic tmp = JsonConvert.DeserializeObject(poolResp);
string resourcePool = tmp._links.user.href;
Console.WriteLine(resourcePool);
var accessTokenReq = CreateRequest("https://login.windows.net/common/oauth2/authorize"
+ "?response_type=id_token"
+ "&client_id=" + clientId
+ "&redirect_uri=https://login.live.com/oauth20_desktop.srf"
+ "&state=" + Guid.NewGuid().ToString()
+ "&resource=" + new Uri(resourcePool).Host.ToString()
, "GET",token);
var accessTokenResp = GetResponse(accessTokenReq);
我的 GetResponse 和 CreateRequest 方法:
public static string GetResponse(HttpWebRequest request)
{
string response = string.Empty;
using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
{
//Get StreamReader that holds the response stream
using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
{
response = reader.ReadToEnd();
}
}
return response;
}
public static HttpWebRequest CreateRequest(string uri, string method, string accessToken)
{
HttpWebRequest request = System.Net.WebRequest.Create(uri) as System.Net.HttpWebRequest;
request.KeepAlive = true;
request.Method = method;
request.ContentLength = 0;
request.ContentType = "application/json";
request.Headers.Add("Authorization", String.Format("Bearer {0}", accessToken));
return request;
}
accessTokenResp 是一个办公室在线登录页面,而不是我需要继续前进的访问令牌......所以我被卡住了。我已经尝试了上述代码的很多变体。
我一直在网上搜索更多示例,但实际上找不到任何示例,尤其是因为 UCWA 对 Office 365 的支持是如此新。有没有人有一个如何做我想做的事情的例子,或者可以给我指出一个例子?到目前为止,我发现的所有东西都还没有真正接近我正在尝试的东西。不幸的是,我也不能使用 Skype for Business 客户端 SDK,因为它不能满足我的所有要求。