将实验性ADAL构建中的代码改编为最新的ADAL构建
本文关键字:构建 ADAL 最新 代码 实验性 | 更新日期: 2023-09-27 18:03:14
我使用的是Microsoft.Experimental.IdentityModel.Clients。ActiveDirectory Nuget包认证到Outlook.com API,然而,像一个月前,所有的成员定义在OutlookServicesClient.Me
急剧停止工作未知的原因(如:OutlookServicesClient.Me.MailFolders.Where(predicate).ExecuteSingleAsync()
)抛出一种服务器请求失败的错误消息没有有用的信息,所以出于这个原因,我想尝试常规库:Microsoft.IdentityModel.Clients。ActiveDirectory,看看它是否可以自动解决问题,只是使用它,而不是尝试使用实验构建。
我遇到的问题是试图迁移下面的下一个代码,这是基于实验构建的语法。我没有发现AcquireTokenAsync
函数的任何过载,我可以指定Outlook范围,我没有找到其他方法来做到这一点,AcquireTokenAsync
函数的第一个参数也期望resource
字符串参数,我不确定我必须放在那里。
我看到了使用AcquireTokenAsync
的官方和第三方示例,但我很困惑,试图适应它们,因为resource
参数或其他东西,我不确定它们是如何工作的,也,我看到的许多示例都是为ASP。. NET,但我使用的是Windows Forms。
这是我需要迁移/更新到新的ADAL语法和方法重载的代码:
VB。NET版本(原始代码)
Dim scopes As String() = {
"https://outlook.office.com/mail.read",
"https://outlook.office.com/mail.readwrite",
"https://outlook.office.com/mail.send"
}
Dim cache As New TokenCache()
Dim authContext As New AuthenticationContext("https://login.microsoftonline.com/common", cache)
Dim authResult As AuthenticationResult =
Await authContext.AcquireTokenAsync(scopes, Nothing, "*Client ID*",
New Uri("urn:ietf:wg:oauth:2.0:oob"),
New PlatformParameters(PromptBehavior.Auto))
Dim client As New OutlookServicesClient(New Uri("https://outlook.office.com/api/v2.0"),
Function() Task.FromResult(Me.authResult.Token))
c# 版本(未测试的在线翻译)
string[] scopes = {
"https://outlook.office.com/mail.read",
"https://outlook.office.com/mail.readwrite",
"https://outlook.office.com/mail.send"
};
TokenCache cache = new TokenCache();
AuthenticationContext authContext =
new AuthenticationContext("https://login.microsoftonline.com/common", cache);
AuthenticationResult authResult =
Await authContext.AcquireTokenAsync(scopes, null, "*Client ID*",
new Uri("urn:ietf:wg:oauth:2.0:oob"),
new PlatformParameters(PromptBehavior.Auto));
OutlookServicesClient client =
new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
() => Task.FromResult(authResult.Token));
这是我的翻译意图,它不工作第一,因为我不知道在哪里设置三个Outlook范围url,其次,因为当我接受微软的许可web表单,它说它不能处理由于无效的请求。(我将resource
参数设置为Nothing
/nul
)
VB。NET版本(原始代码)
Dim cache As New TokenCache()
Dim authContext As New AuthenticationContext("https://login.microsoftonline.com/common", cache)
Dim authResult As AuthenticationResult =
Await authContext.AcquireTokenAsync(resource???, "*Client ID*",
New Uri("urn:ietf:wg:oauth:2.0:oob"),
New PlatformParameters(PromptBehavior.Auto))
Dim client As New OutlookServicesClient(New Uri("https://outlook.office.com/api/v2.0"),
Function() Task.FromResult(authResult.AccessToken))
c# 版本(未测试的在线翻译)
TokenCache cache = new TokenCache();
AuthenticationContext authContext =
new AuthenticationContext("https://login.microsoftonline.com/common", cache);
AuthenticationResult authResult =
Await authContext.AcquireTokenAsync(resource???, "*Client ID*",
new Uri("urn:ietf:wg:oauth:2.0:oob"),
new PlatformParameters(PromptBehavior.Auto));
OutlookServicesClient client =
new OutlookServicesClient(new Uri("https://outlook.office.com/api/v2.0"),
() => Task.FromResult(authResult.AccessToken));
要使用V2端点对客户端应用程序进行身份验证,我们可以使用MSAL库。
这里有一个例子供你参考:
通过NuGet安装包:Install-Package Microsoft.Identity.Client -pre
public static async void GetToken()
{
string clientId = "0cfa4d3e-db48-400f-9b44-901cd5975312";
var app = new PublicClientApplication(clientId);
AuthenticationResult result = null;
try
{
string[] scopes = {
"https://outlook.office.com/mail.read",
"https://outlook.office.com/mail.readwrite",
"https://outlook.office.com/mail.send"
};
result = await app.AcquireTokenAsync(scopes);
Console.WriteLine(result.Token);
}
catch (MsalException ex)
{
}
}
下面是一个详细的示例来添加登录到Windows桌面应用程序