このブログ投稿に従って、xamarin フォーム アプリで MSAL を使用して Azure AD での認証を実装しました。
正常に動作しているように見えました.ADアカウントでログインできる期待されるログインダイアログが表示され、アクセストークンを含むAuthenticationResultが返されます。
ただし、トークンを使用しようとすると、API から 401-Unauthorized が返されます。属性を使用して[Authorize]
、Azure の appservice で [要求が認証されない場合に実行するアクション] を [Azure Active Directory でログイン] に設定しようとしました。しかし、どちらの場合も失敗します。
返されたアクセストークンを確認すると、トークンがすぐに期限切れになるため、401を説明するトークンを要求した瞬間の正確なDateTimeがExpiresOnプロパティに含まれていることに気付きました。
[Authorize]
API でを確認できるように、Azure をすべて許可するように設定して削除しようとしましたRequestContext.Principal.Identity
が、IsAuthenticated プロパティは false であり、他の ID プロパティには私の情報が含まれていません。
トークンが取得された時点で有効期限が切れる理由や、しばらくの間これに固執しているため、何が間違っているのかを誰かが教えてくれることを願っています.
私のコード:
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
};
}
}