如何在PCL中解码与Xamarin Android兼容的JWT

时间:2014-08-21 19:11:36

标签: .net xamarin.ios xamarin.android jwt thinktecture-ident-model

我有一个带有PCL程序集,Android应用程序和iOS应用程序的Xamarin.Forms解决方案,我想解码PCL中的JWT。

我不能使用 Thinktecture.IdentityModel.Core 1.1.0 System.IdentityModel.Tokens.Jwt 4.0.0 JWT 1.3.2 < / strong>因为没有一个可以添加到以“ portable-net45 + win + MonoAndroid10 + MonoTouch10 ”为目标的项目中。

我能够从NuGet添加 Jose JWT 1.7.0 并确认它在单元测试中有效,但是它导致我在我的Xamarin Android项目中出现以下构建错误... < / p> 加载程序集时出现

异常:System.IO.FileNotFoundException:无法加载程序集'System.Web.Extensions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'。也许它在Mono for Android个人资料中不存在?

建议?

2 个答案:

答案 0 :(得分:6)

http://developer.xamarin.com/guides/android/under_the_hood/assemblies/可以看出,Mono for Android中的.NET框架似乎不包含程序集System.Web.Extensions

编辑:这意味着您正在引用为桌面使用而创建的库,并且尚未使用Android参考程序集重新编译。这不受支持。

答案 1 :(得分:0)

我使用了一个名为Portable.JWT的库

https://www.nuget.org/packages/Portable.JWT/

您需要这样做是在Shared PCL项目中,而不是Xamarin.Android

您可以执行以下操作:

public static class JwtDecoder
{
  public static long TokenExpirationTime(string token)
  {
    var decodedToken = JWT.JsonWebToken.DecodeToObject<Dictionary<string, object>>(token, default(byte[]), false);
    var exp = decodedToken["exp"];
    return (long)exp;
  }
}