- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我按照以下文档通过 Azure AD 应用注册创建了 x509 证书。
https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread
我生成了 .pfx 文件,设置了密码,还在我的租户 Azure AD 中注册了该应用,然后使用 key 凭据部分更新了 list 。
然后,我创建一个 WEB API,它接收一些参数,包括 .pfx 文件。
[HttpPut]
public async Task<IHttpActionResult> PutTenant([ModelBinder(typeof(TenantModelBinder))] Tenant tenant)
{
try
{
var cert = new X509Certificate2(tenant.CertificateFile, tenant.CertificatePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
using (var cc = new OfficeDevPnP.Core.AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(tenant.SiteCollectionTestUrl, tenant.ApplicationId, tenant.TenantDomainUrl, cert))
{
cc.Load(cc.Web, p => p.Title);
cc.ExecuteQuery();
};
}
catch (System.Exception)
{
return BadRequest("Configuration Invalid");
}
我使用来自 HttpRequest 的字节数组来创建 x509 对象。
但是我收到此错误:
Message "Method not found: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationResult Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireToken(System.String, Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate)'." string
堆栈跟踪:
at OfficeDevPnP.Core.AuthenticationManager.<>c__DisplayClass36_0.<GetAzureADAppOnlyAuthenticatedContext>b__0(Object sender, WebRequestEventArgs args)\r\n at Microsoft.SharePoint.Client.ClientRuntimeContext.OnExecutingWebRequest(WebRequestEventArgs args)\r\n at Microsoft.SharePoint.Client.ClientContext.GetWebRequestExecutor()\r\n at Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate()\r\n at Microsoft.SharePoint.Client.ClientContext.EnsureFormDigest()\r\n at Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()\r\n at TenantManagementWebApi.Controllers.TenantController.<PutTenant>d__2.MoveNext() in C:\\Users\\levm3\\source\\repos\\TenantManagementWebApi\\Controllers\\TenantController.cs
执行查询时抛出错误
这里真的一无所知。
更新:
我在我的 web.config 中注意到了这一点
<dependentAssembly>
<assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.19.5.13701" newVersion="3.19.5.13701"/>
</dependentAssembly>
这在我的packages.config中
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.19.5" targetFramework="net461" />
最佳答案
PnP Core 当前使用旧版本 2.29.0
, Microsoft.IdentityModel.Clients.ActiveDirectory
的包。
最好将 API 项目中使用的版本降级为 PnP 框架使用的版本,这样肯定可以正常工作。
与该错误相关的是,框架正在调用 AuthenticationContext.AcquireToken
内部方法已在较新的 Nuget v3 包中弃用。
所以,看起来PnP代码调用的这个方法属于v2版本,而v3包使用的正确方法是 AcquireTokenAsync
导致冲突的 v3 版本。
引用 - OfficeDevPnP Core package.config文件
现在,我们可以看到已经是 PR更新 PnP 框架本身中的 nuget 包,接受后将立即解决您的问题。但可能需要一些时间才能被接受,所以不要屏住呼吸:)
AuthenticationResult.AcquireToken deprecated in ADAL 3.x and how to fix.
微软文档 - AuthenticationContext.AcquireTokenAsync Method
因此,最好将 API 项目降级到 v2,或者等待 PnP 框架升级包及其必要的依赖项。
另一个选项,如果您仅使用 PnP 进行身份验证,那么您可以使用以下帮助程序方法,该方法不需要您更改包。但是,如果您使用其他功能(例如配置或其他扩展),那么不幸的是您需要将其降级。这是根据 PnP 本身内部使用的内容进行修改的,以利用 v3 包更改:
public ClientContext GetAzureADAppOnlyAuthenticatedContext(string siteUrl, string clientId, string tenant, X509Certificate2 certificate)
{
var clientContext = new ClientContext(siteUrl);
string authority = string.Format(CultureInfo.InvariantCulture, "https://login.windows.net/{0}/", tenant);
var authContext = new AuthenticationContext(authority);
var clientAssertionCertificate = new ClientAssertionCertificate(clientId, certificate);
var host = new Uri(siteUrl);
clientContext.ExecutingWebRequest += (sender, args) =>
{
var ar = authContext.AcquireTokenAsync(host.Scheme + "://" + host.Host + "/", clientAssertionCertificate).GetAwaiter().GetResult();
args.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + ar.AccessToken;
};
return clientContext;
}
关于c# - 找不到方法 : AcquireToken(System. 字符串,Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51200031/
我已经使用 ADALiOS 获得并尝试了许多示例。如您所知,ADALiOS 不断更改其实现。因为我是swift的初学者,所以我不知道如何从网上制作样本。 我尝试了 adal 3.0(预发布)版本。如您
我已通过 Azure AD 应用程序注册注册了我的应用程序。 在我的场景中,我使用带有客户端凭据的 Azure Adal AquireTokenAsync 方法,该方法始终返回相同的 token 。
我在 initial post 之后取得了一些进步关于将 adal.js 与 Vue.js 集成。我已成功登录,我希望设置的属性正在 localStorage 中设置。 但是,对 acquireTok
我收到以下错误: 代码:字符串redirectUrl = ConfigurationManager.AppSettings["RedirectUrl"];AuthenticationParameter
我们使用 Azure Active Directory 来保护我们的 Azure 托管 API。这些 API 由 Azure 托管的 Angular 应用程序使用。 Mocst 的 API 是作为 A
我们使用 Azure Active Directory 来保护我们的 Azure 托管 API。这些 API 由 Azure 托管的 Angular 应用程序使用。 Mocst 的 API 是作为 A
我正在尝试从 outlooo 365 API 获取一些日历项 我从样本中得到的代码是这样的: public async Task Index() { // fetch from stuf
我正在尝试使用 .NET ADAL 库验证 Azure AD 中的用户密码。这对于没有 MFA 的常规用户帐户来说效果很好,但对于激活了 MFA 的用户执行此操作时遇到了问题。 当使用用户的实际密码时
我正在尝试使用 Microsoft Power BI REST API,但由于我对该 API 的经验不是很丰富,所以没有取得多大进展 据我了解,身份验证上下文是身份模型事件目录的一部分,我会三次检查它
我能够在本地工作时使用线路对用户进行身份验证 AuthenticationResult result = context.AcquireToken(resource,clientID, returnU
我正在关注 tutorial用于通过 AAD 对 Power BI REST API 进行身份验证。 本教程使用 C# 和 ADAL。它通过以下方式获取 token , AuthenticationC
为什么我的 Azure AD 应用程序不允许 oauth client_credentials 授予? 我想使用 Azure Graph API,但首先我需要一个 oauth token 。为了获取
我正在尝试让一些 MSFT Power BI SDK 示例正常工作。不幸的是,Microsoft.IdentityModel.Clients.ActiveDirectory 库在初始外部身份验证步骤中
我面临奇怪的问题,我想将 Office 365 API 集成到我的网站中。我正在关注这个 git 代码示例 O365-ASPNETMVC-Start 。我按照所有步骤操作并成功在本地计算机中获取电子邮
我面临奇怪的问题,我想将 Office 365 API 集成到我的网站中。我正在关注这个 git 代码示例 O365-ASPNETMVC-Start 。我按照所有步骤操作并成功在本地计算机中获取电子邮
在 ADAL.NET 2.x 中,我们使用以下代码使用 UserCredential 从 Azure AD 获取 token ,并且效果完美: var authContext = new Authe
我正在集成 MSAL 2.2.1进入 Android 应用程序。 我已在 Azure b2c 门户中注册了该应用。 生成签名并将其添加到 Azure b2c 门户。 在尝试获取 token 时获得登录
我正在集成 MSAL 2.2.1进入 Android 应用程序。 我已在 Azure b2c 门户中注册了该应用。 生成签名并将其添加到 Azure b2c 门户。 在尝试获取 token 时获得登录
我尝试使用 Azure AD。 这是我使用的代码: Add-Type -Path "D:\GraphAPI\Microsoft.IdentityModel.Clients.ActiveDir
我按照以下文档通过 Azure AD 应用注册创建了 x509 证书。 https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidan
我是一名优秀的程序员,十分优秀!