1

我已经实现了一种通过MSAL身份验证使用Xamarin Forms来使用Web API 2的方法。 它在UWP上效果很好,但我无法在Android平台上进行身份验证。Xamarin和Android的MSAL身份验证

我总是得到了认证Authorization has been denied for this request.

的代码看起来是这样的:

public static PublicClientApplication IdentityClientApp = null; 

internal static void InitializeLogin(PlatformParameters platformParameters) 
    { 
     App.IdentityClientApp = new PublicClientApplication(Constants.ApplicationID); 
      if (platformParameters != null) 
       App.IdentityClientApp.PlatformParameters = platformParameters; 

我得到的第一个标记是这样的:

public async Task SignIn() 
{ 
    if (App.IdentityClientApp != null) 
     this.authenticationResult = await App.IdentityClientApp.AcquireTokenAsync(new String[] { Constants.ApplicationID }); 
} 

而且每次通话前刷新到我的API那样:

public async Task<String> RefreshToken() 
{ 
    if (App.IdentityClientApp != null) 
    { 
     this.authenticationResult = await App.IdentityClientApp.AcquireTokenSilentAsync(new String[] { Constants.ApplicationID }); 
    } 
    return (this.authenticationResult.Token); 
} 

在我的Android MainActivity.cs,我称之为登录初始化方法与platformParameters:

App.InitializeLogin(new PlatformParameters(this)); 
+0

为了缩小这个问题,请解码本网站的access_token以检查'aud'声明是否与**受众**配置匹配以保护网络API。 –

+0

谢谢你的回答。观众似乎是正确的,因为我在那里看到我的applicationID。 –

回答

0

PlatformParameters是MSAL从2016年第一个预览,这是不支持预览和的释放更新的预览(支持)将取代它。请参阅https://azure.microsoft.com/en-us/resources/samples/active-directory-xamarin-native-v2/了解如何在Android上使用最新的MSAL的完整示例。 另请注意:Azure AD v2端点暂时不支持从本机客户端为API以外的其他API颁发访问令牌。它应该很快上线,但目前我们没有ETA可以共享。

+0

感谢您的答案,我有点注意到,我无法验证我的API与新版本的MSAL。 你知道什么是在我的API上进行身份验证并使用Graph API的最佳方式吗? –

+0

您的意思是说,仅从Android或者任何平台的API上进行身份验证是不可能的? 我已经能够在UWP平台上获得访问令牌而没有任何问题。 –

+0

不管客户端平台是否为MS图,都不存在访问令牌,因为它是服务端行为。该修复应该是几周后(我不能完全承诺时间)。再次为不便带来的不便 – vibronet