我有一个带有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个人资料中不存在?
建议?
答案 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;
}
}