ADAL 4(实验性)对于 Windows Desktop/Native 和 Windows Phone 与 B2C 的行为不同
ADAL 4 (experimental) behaves differently for Windows Desktop/Native and Windows Phone with B2C
我想使用 Azure AD B2C 身份验证创建一个 Windows Phone 8.1 应用程序。
作为基础,我使用了 B2C Windows Desktop/Native Client sample.
桌面应用程序运行良好。在我采用 WP8.1 的过程中,我 运行 遇到了第一个问题,我想在此处获取令牌:
result = await authContext.AcquireTokenAsync(new string[] { Globals.clientId },
null, Globals.clientId, new Uri(Globals.redirectUri),
platformParams, Globals.signInPolicy);
虽然我为桌面应用程序获得了一个漂亮而闪亮的令牌,但对于 WP8.1 应用程序(从 WebAuthenticationBroker 返回后)我只获得了 ...?code=...... 响应。
我不确定,但对我来说,WP8.1 库似乎以一种 OIDC model 的方式工作,其中第一个调用转到 authorize 并且token 端点的第二个。
从那里开始我试图继续使用
收到的授权码
var result = await authContext.AcquireTokenByAuthorizationCodeAsync(authCode, new Uri(Globals.redirectUri),
credApp, new string[] { "" }, Globals.signInPolicy );
但无论我如何尝试传递 ClientCredential 或 ClientAssertion 我总是以普通的 结束400 错误请求(没有返回更多详细信息)。
有人请告诉我哪里错了and/or 指出正确的方向。
Windows Phone 8.1 使用延续模型,其中 WAB 调用调用应用程序。在 https://github.com/Azure-Samples/active-directory-dotnet-windowsphone-8.1/ to demo the flow or you can directly look at https://github.com/Azure-Samples/active-directory-dotnet-windowsphone-8.1/blob/master/TodoListClient/MainPage.xaml.cs
查看示例
您需要在页面上实现 IWebAuthenticationContinuable 接口。
}
#region IWebAuthenticationContinuable implementation
// This method is automatically invoked when the application is reactivated after an authentication interaction through WebAuthenticationBroker.
public async void ContinueWebAuthentication(WebAuthenticationBrokerContinuationEventArgs args)
{
// pass the authentication interaction results to ADAL, which will conclude the token acquisition operation and invoke the callback specified in AcquireTokenAndContinue.
await authContext.ContinueAcquireTokenAsync(args);
}
#endregion
---------------------------------------- --------------------------
更新
我创建了一个新的 windows phone 应用程序并引用了 ADAL v4。我检查过延续模型不适用于 v4。它仅由 ADAL v2 使用。确保您使用的是 adal-v4。
我仍然必须添加以下代码
protected override void OnActivated(IActivatedEventArgs args)
{
if (args is IWebAuthenticationBrokerContinuationEventArgs)
{
Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.WebAuthenticationBrokerContinuationHelper.SetWebAuthenticationBrokerContinuationEventArgs(args as IWebAuthenticationBrokerContinuationEventArgs);
}
base.OnActivated(args);
}
这将恢复令牌获取过程和return访问令牌
我创建了一个完整的 运行 示例 Windows Phone 带有 Azure AD B2C 身份验证的 8.1 应用 here...
调查结果(与 ADAL v2 Azure AD 身份验证相比):
- 不需要 ContinuationManager - 这在 ADAL v4
SetWebAuthenticationBrokerContinuationEventArgs
中涵盖
- 使用这种方法代码在
AcquireTokenAsync
之后直接继续执行
我想使用 Azure AD B2C 身份验证创建一个 Windows Phone 8.1 应用程序。 作为基础,我使用了 B2C Windows Desktop/Native Client sample.
桌面应用程序运行良好。在我采用 WP8.1 的过程中,我 运行 遇到了第一个问题,我想在此处获取令牌:
result = await authContext.AcquireTokenAsync(new string[] { Globals.clientId },
null, Globals.clientId, new Uri(Globals.redirectUri),
platformParams, Globals.signInPolicy);
虽然我为桌面应用程序获得了一个漂亮而闪亮的令牌,但对于 WP8.1 应用程序(从 WebAuthenticationBroker 返回后)我只获得了 ...?code=...... 响应。
我不确定,但对我来说,WP8.1 库似乎以一种 OIDC model 的方式工作,其中第一个调用转到 authorize 并且token 端点的第二个。
从那里开始我试图继续使用
收到的授权码var result = await authContext.AcquireTokenByAuthorizationCodeAsync(authCode, new Uri(Globals.redirectUri),
credApp, new string[] { "" }, Globals.signInPolicy );
但无论我如何尝试传递 ClientCredential 或 ClientAssertion 我总是以普通的 结束400 错误请求(没有返回更多详细信息)。
有人请告诉我哪里错了and/or 指出正确的方向。
Windows Phone 8.1 使用延续模型,其中 WAB 调用调用应用程序。在 https://github.com/Azure-Samples/active-directory-dotnet-windowsphone-8.1/ to demo the flow or you can directly look at https://github.com/Azure-Samples/active-directory-dotnet-windowsphone-8.1/blob/master/TodoListClient/MainPage.xaml.cs
查看示例您需要在页面上实现 IWebAuthenticationContinuable 接口。 }
#region IWebAuthenticationContinuable implementation
// This method is automatically invoked when the application is reactivated after an authentication interaction through WebAuthenticationBroker.
public async void ContinueWebAuthentication(WebAuthenticationBrokerContinuationEventArgs args)
{
// pass the authentication interaction results to ADAL, which will conclude the token acquisition operation and invoke the callback specified in AcquireTokenAndContinue.
await authContext.ContinueAcquireTokenAsync(args);
}
#endregion
---------------------------------------- --------------------------
更新
我创建了一个新的 windows phone 应用程序并引用了 ADAL v4。我检查过延续模型不适用于 v4。它仅由 ADAL v2 使用。确保您使用的是 adal-v4。 我仍然必须添加以下代码
protected override void OnActivated(IActivatedEventArgs args)
{
if (args is IWebAuthenticationBrokerContinuationEventArgs)
{
Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.WebAuthenticationBrokerContinuationHelper.SetWebAuthenticationBrokerContinuationEventArgs(args as IWebAuthenticationBrokerContinuationEventArgs);
}
base.OnActivated(args);
}
这将恢复令牌获取过程和return访问令牌
我创建了一个完整的 运行 示例 Windows Phone 带有 Azure AD B2C 身份验证的 8.1 应用 here...
调查结果(与 ADAL v2 Azure AD 身份验证相比):
- 不需要 ContinuationManager - 这在 ADAL v4
SetWebAuthenticationBrokerContinuationEventArgs
中涵盖
- 使用这种方法代码在
AcquireTokenAsync
之后直接继续执行