我根据this blogpost在我的xamarin表单应用中使用MSAL在Azure AD中实现了身份验证。
它似乎工作正常,它给了我预期的登录对话框,我可以使用我的AD帐户登录并返回带有accessstoken的AuthenticationResult。
然而,当我尝试使用令牌时,我的API给了我401-Unauthorized。
我尝试使用[Authorize]
属性并在Azure中的应用服务上将“请求未经过身份验证时采取的操作”设置为“使用Azure Active Directory登录”。但两种情况都失败了。
当我检查accessstoken时,它返回我注意到ExpiresOn属性在我请求我的令牌的时刻具有确切的DateTime,该令牌可以解释401,因为令牌将立即过期。
我尝试删除[Authorize]
并将Azure设置为Allow all,这样我就可以检查我的API中的RequestContext.Principal.Identity
,但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
};
}
}