Ошибка URI перенаправления активной директории Xamarin Azure - PullRequest
1 голос
/ 01 апреля 2019

Я занимаюсь разработкой приложения Xamarin, которое должно аутентифицировать пользователя через Azure AD, для этого я использую слепок Microsoft.Identity.Client.

Приложение может перейти на страницу Microsoft SSO, но после нажатия кнопки входа в систему страница возвращает ошибку: AADSTS50011: URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения: [ ApplicationID]

Класс приложения:

    public static string ClientID = [ApplicationID];

    public static string[] Scopes = { "User.Read" };
    public static string Username = string.Empty;

    public static UIParent UiParent { get; set; }

    public App()
    {
        InitializeComponent();
        PCA = new PublicClientApplication(ClientID);
        PCA.RedirectUri = $"msal{App.ClientID}://auth";
        //PCA.RedirectUri = $"AppSGA://auth";

        MainPage = new Paginas.Login();
    }

в четвертой строке в конструкторе, если я использую PCA.RedirectUri = "AppSGA: // auth"; вместо PCA.RedirectUri = $ "msal {App.ClientID}: // auth"; он не возвращает ошибок, но страница sso будет загружаться вечно без какого-либо ответа.

Метод входа на странице входа:

 private async void ADLogin()
    {
        AuthenticationResult authResult = null;
        IEnumerable<IAccount> accounts = await App.PCA.GetAccountsAsync();

        try
        {
            IAccount firstAccount = accounts.FirstOrDefault();
            authResult = await App.PCA.AcquireTokenSilentAsync(App.Scopes, firstAccount);
            await UserDataAsync(authResult.AccessToken).ConfigureAwait(false);
        }
        catch (MsalUiRequiredException ex)
        {
            try
            {
                authResult = await App.PCA.AcquireTokenAsync(App.Scopes, App.UiParent);

                await UserDataAsync(authResult.AccessToken);
            }
            catch (Exception ex2)
            {

            }
        }
    }

В Azure приложение было зарегистрировано с:

Имя: AppSGA

Тип приложения: родной

Redirect URi: AppSGA: // auth

Манифест приложения в Azure:

   {
  "appId": AppID,
  "appRoles": [],
  "availableToOtherTenants": true,
  "displayName": "AppSGA",
  "errorUrl": null,
  "groupMembershipClaims": null,
  "optionalClaims": null,
  "acceptMappedClaims": null,
  "homepage": null,
  "informationalUrls": {
    "privacy": null,
    "termsOfService": null
  },
  "identifierUris": [],
  "keyCredentials": [],
  "knownClientApplications": [],
  "logoutUrl": null,
  "oauth2AllowImplicitFlow": true,
  "oauth2AllowUrlPathMatching": true,
  "oauth2Permissions": [],
  "oauth2RequirePostResponse": false,
  "objectId": [ObjectId],
  "parentalControlSettings": {
    "countriesBlockedForMinors": [],
    "legalAgeGroupRule": "Allow"
  },
  "passwordCredentials": [],
  "publicClient": true,
  "replyUrls": [
    "AppSGA://auth"
  ],
  "requiredResourceAccess": [
    {
      "resourceAppId": resourceAppId,
      "resourceAccess": [
        {
          "id": id,
          "type": "Scope"
        }
      ]
    },
    {
      "resourceAppId": resourceAppId
      "resourceAccess": [
        {
          "id": id,
          "type": "Scope"
        }
      ]
    }
  ],
  "samlMetadataUrl": null
}

Кто-нибудь знает, что может быть причиной этой проблемы?

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

PCA.RedirectUri = $"msal{App.ClientID}://auth"; - это формат RedirectUri по умолчанию для Android и iOS Xamarin при использовании MSAL.

Вот документация по настройке redirectUri для публичных клиентов .

Если вы используете Android, в AndroidManifest.xml вам необходимо указать следующее:

<data android:scheme="msal{client_id}" android:host="auth" />

Подробнее о настройке Xamarin Android и iOS

Кроме того, вам следует рассмотреть возможность обновления до MSAL v3.x. Вот ссылка на сообщение в блоге , в котором рассказывается, как перейти на новый шаблон компоновщика для создания общедоступного клиента и обработки вызовов токена захвата.

1 голос
/ 03 апреля 2019

Обычно это происходит из-за того, что URL-адрес ответа, настроенный на портале, отличается от URL-адреса, указанного в вашем приложении. Это должно быть точное совпадение.

Вот учебник для исправления этого. Это относится к Службам приложений, но применяются те же шаги: https://blogs.msdn.microsoft.com/jpsanders/2018/01/30/azure-app-service-error-aadsts50011-the-reply-address-http-azurewebsites-netsignin-oidc-does-not-match-the-reply-addresses-configured-for-the-application/

Иногда это изменение иногда распространяется - меня часто ловят, потому что я меняю этот параметр в AAD, но думаю, что он не был исправлен, потому что он не начинает работать сразу.

...