根据这篇博文,我在我的 xamarin 表单应用程序中使用 MSAL 实现了 Azure AD 身份验证。
它似乎工作正常,它给了我预期的登录对话框,我可以在其中使用我的 AD 帐户登录并返回带有访问令牌的 AuthenticationResult。
但是,当我尝试使用令牌时,我的 API 给了我一个 401-未授权。我尝试[Authorize]
在 Azure 中的应用服务上使用该属性并将“请求未通过身份验证时采取的操作”设置为“使用 Azure Active Directory 登录”。但在这两种情况下都失败了。
当我检查它返回的访问令牌时,我注意到 ExpiresOn 属性中包含我请求令牌时的确切日期时间,这可以解释 401,因为令牌将立即过期。
我尝试删除[Authorize]
并将 Azure 设置为 Allow all,以便我可以RequestContext.Principal.Identity
在我的 API 中检查,但 IsAuthenticated 属性为 false,并且没有其他身份属性包含我的任何信息。
希望有人能够告诉我为什么我的令牌在获得时过期或者我做错了什么,因为我已经坚持了一段时间。
我的代码:
PublicClientApplication = new PublicClientApplication(authority, clientId);
和
public async Task Authenticate()
{
AuthenticationResult authenticationResult;
try
{
authenticationResult = await App.PublicClientApplication.AcquireTokenSilentAsync(App.Scopes);
}
catch (Exception e)
{
try
{
authenticationResult = await App.PublicClientApplication.AcquireTokenAsync(App.Scopes);
}
catch (Exception ex)
{
authenticationResult = null;
App.Logger.LogException(ex);
}
}
if (authenticationResult != null)
{
TokenData = new ApiTokenData
{
AccessToken = authenticationResult.Token,
ExpiresAt = authenticationResult.ExpiresOn.UtcDateTime
};
}
}