我们已按照https://github.com/Azure-Samples/active-directory-b2c-xamarin-native中提供的指南,将Xamarin应用程序示例与AAD B2C集成在一起。
我们现在不调用CallAPI方法。作为身份验证后的响应,我们只收到id_token而不是access_token。
我是否必须强制调用API以获取生成的访问令牌?我们不使用client_secret。
响应后身份验证是否不同时包含id_token和access_token?
答案 0 :(得分:2)
这是用于以交互方式对用户进行签名的呼叫(source):
private async Task<UserContext> SignInInteractively()
{
IEnumerable<IAccount> accounts = await _pca.GetAccountsAsync();
AuthenticationResult authResult = await _pca.AcquireTokenInteractive(B2CConstants.Scopes)
.WithAccount(GetAccountByPolicy(accounts, B2CConstants.PolicySignUpSignIn))
.ExecuteAsync();
var newContext = UpdateUserInfo(authResult);
return newContext;
}
如果存在有效的[scopes]
,并且按照here的说明进行配置(以下出于永久性而复制),那么您将同时获得id_token
和access_token
。如果您没有提供适当的范围,则唯一的范围将是openid
,并且仅返回id_token,因为没有资源来获取访问令牌。
[可选]步骤4:创建自己的Web API
此示例在https://fabrikamb2chello.azurewebsites.net处调用API,该API与示例Node.js Web API with Azure AD B2C具有相同的代码。您将需要自己的API,或者至少需要register a Web API with Azure AD B2C,以便可以定义单页应用程序将为其请求访问令牌的范围。
您的Web API注册应包括以下信息:
- 为您的应用程序启用 Web应用程序/ Web API 设置。
- 将答复URL 设置为示例中指示的适当值,或者,如果您仅在进行Web api注册,例如
https://myapi
,则提供任何URL。- 确保您还提供了 AppID URI ,例如
demoapi
,这用于构造在单页应用程序的代码中配置的范围。- 创建应用程序后,打开应用程序的发布的范围边栏并使用
read
名称创建一个范围。- 复制 AppID URI 和 Published Scope 值,以便您可以在应用程序的代码中输入它们。
[可选]步骤5:创建自己的本机应用
现在,您需要在B2C租户中注册本机应用程序,以便它具有自己的应用程序ID。不要忘记授予您的应用程序API访问上一步中注册的Web API的权限。
您的本机应用程序注册应包括以下信息:
- 为您的应用程序启用本地客户端设置。
- 创建应用后,打开应用的属性刀片,然后将应用的自定义重定向URI 设置为
msal<Application Id>://auth
。- 创建应用后,打开应用的 API访问权限刀片并添加在上一步中创建的API。
- 复制为您的应用程序生成的应用程序ID,以便您可以在下一步中使用它。