由于Microsoft Graph API没有管理B2C AD用户的功能,因此我们要求其中一个文档使用ADAL,这需要在Azure AD B2C租户中创建特殊应用程序。创建了一个应用程序密钥,以便从xamarin.ios应用程序提供API访问。
AuthenticationContext authContext = new AuthenticationContext(authority);
credential = new ClientCredential(clientId, GraphClientSecret);
authResult = await authContext.AcquireTokenAsync(graphResourceUri, credential);
在AcquireTokenAsync调用中,我们收到异常
AcquireTokenHandlerBase.cs: System.NullReferenceException: Object reference not set to an instance of an object at Microsoft.IdentityModel.Clients.ActiveDirectory.BrokerHelper.get_CanInvokeBroker () [0x0000c] in <786d1e888b334ad993ac80d2bc3b6e92>:0
at Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase+<RunAsync>d__55.MoveNext () [0x00389] in <97581c6894a642ef95d008cded8ad4ac>:0
如果我将该调用更改为删除凭据,我只会获得一个登录屏幕。
使用的套餐:
样本取自Sample from Docs
非常感谢任何帮助。
答案 0 :(得分:1)
您不应使用来自本机客户端应用程序的客户端凭据(例如Xamarin / iOS应用程序)调用Graph API。 这是一个巨大的安全漏洞。客户端应用程序本质上是不安全的,任何人都可以反映代码并抓住您的client_id和client_secret,他们可以使用它们来创建/更新/删除Azure AD B2C租户中的用户。
您的原生客户端应用程序应调用Web API,然后调用图谱API。此Web API(link to sample)是您构建的API,具有授权逻辑以限定范围用户管理操作。
通过Microsoft Graph和MSAL支持Azure AD B2C中的用户管理后,您将不需要此API,并且能够使用委派的权限(使用客户端凭据的应用程序权限)直接与您的本机客户端应用程序通信到Microsoft Graph。在此期间,您必须按照上面的指导站起来自己的Web API。