C# Xamarin Azure活动目录重定向URI错误

C# Xamarin Azure活动目录重定向URI错误,c#,xamarin.forms,azure-active-directory,C#,Xamarin.forms,Azure Active Directory,我正在开发一个Xamarin应用程序,它需要通过Azure广告对用户进行身份验证,为此我使用Microsoft.Identity.Client nugget 应用程序可以转到microsoft SSO页面,但点击登录按钮后,页面返回错误:AADSTS50011:请求中指定的回复url与为应用程序配置的回复url不匹配:[ApplicationID] 应用程序类别: public static string ClientID = [ApplicationID]; public s

我正在开发一个Xamarin应用程序,它需要通过Azure广告对用户进行身份验证,为此我使用Microsoft.Identity.Client nugget

应用程序可以转到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)
            {

            }
        }
    }

有人知道问题的原因吗?

这通常是因为门户中配置的回复URL与应用程序指定的URL不同。这一定是一模一样的

下面是修复此问题的教程。适用于应用程序服务,但步骤相同:


有时需要几分钟才能完成此更改-我经常被抓到,因为我在AAD中更改了此设置,但认为它没有得到修复,因为它不会立即开始工作。

这通常是因为门户中配置的回复URL与应用程序指定的URL不同。这一定是一模一样的

下面是修复此问题的教程。适用于应用程序服务,但步骤相同:

有时,这项更改需要几分钟才能完成-我经常被发现,因为我在AAD中更改了此设置,但认为它没有得到修复,因为它没有立即开始工作。

PCA.RedirectUri=$msal{App.ClientID}://auth;是使用MSAL时Xamarin Android和iOS的默认重定向URI的格式

给你

如果您使用的是Android,则需要在AndroidManifest.xml中包含以下内容:

这里有更多和更多

也应该考虑升级到MSAL v3.x。这里有一个指向的链接,它概述了如何迁移到新的构建器模式以创建公共客户端和处理acquire令牌调用。

PCA.RedirectUri=$msal{App.ClientID}://auth;是使用MSAL时Xamarin Android和iOS的默认重定向URI的格式

给你

如果您使用的是Android,则需要在AndroidManifest.xml中包含以下内容:

这里有更多和更多


也应该考虑升级到MSAL v3.x。这里有一个指向的链接,概述了如何迁移到新的构建器模式,以创建公共客户端并处理acquire令牌调用。

重定向uri有问题。重定向URI是Azure AD用于返回令牌响应的方案和字符串组合。输入一个值,例如,.Hi Tony,我更改了应用程序和Azure中的de URI,但也不起作用,相同的错误重定向url应该是在用户登录后显示的url。您可以调试以查看请求url中重定向url的值吗?我无法在.AcquireTokenAsync中进行调试,但如果我在到达此行之前进行调试,uri将返回,您可以使用fiddler捕获请求。重定向uri有问题。重定向URI是Azure AD用于返回令牌响应的方案和字符串组合。输入一个值,例如,.Hi Tony,我更改了应用程序和Azure中的de URI,但也不起作用,相同的错误重定向url应该是在用户登录后显示的url。您可以调试以查看请求url中重定向url的值吗?我无法在.AcquireTokenAsync中进行调试,但如果在它转到此行之前进行调试,uri将返回,您可以使用fiddler捕获请求。@rodrigo.cantunes awesome@罗德里戈,这首歌太棒了!
   {
  "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
}