/// <summary> /// 构造一个 <see cref="SecurityToken"/>。 /// </summary> /// <param name="token">给定的令牌字符串。</param> /// <param name="converter">给定的 <see cref="IAlgorithmConverter"/>(可选;默认使用 <see cref="HexStringConverter"/>)。</param> public SecurityToken(string token, IAlgorithmConverter converter = null) { if (!TryParseToken(EnsureConverter(converter), token, out var buffer)) { throw new ArgumentException($"The token '{token}' is not a valid security token."); } _buffer = buffer; }
private static bool TryParseToken(IAlgorithmConverter converter, string token, out byte[] buffer) { if (TryParseSignedToken(token, out var result)) { buffer = converter.ConvertFrom(result.DataSegments[0]); return(true); } buffer = null; return(false); }
/// <summary> /// 尝试获取安全令牌。 /// </summary> /// <param name="token">给定的令牌字符串。</param> /// <param name="result">输出 <see cref="SecurityToken"/>。</param> /// <param name="converter">给定的 <see cref="IAlgorithmConverter"/>(可选;默认使用 <see cref="HexStringConverter"/>)。</param> /// <returns>返回布尔值。</returns> public static bool TryGetToken(string token, out SecurityToken result, IAlgorithmConverter converter = null) { if (TryParseSignedToken(token, out _)) { result = new SecurityToken(token, converter); return(true); } result = null; return(false); }
public void AllTest() { var buffer = nameof(ConverterManagerTests).FromEncodingString(); IAlgorithmConverter converter = ConverterManager.GetAlgorithm <Base32StringConverter>(); var algorithm = converter.ConvertTo(buffer); Assert.True(buffer.SequenceEqual(converter.ConvertFrom(algorithm))); converter = ConverterManager.GetAlgorithm <Base64StringConverter>(); algorithm = converter.ConvertTo(buffer); Assert.True(buffer.SequenceEqual(converter.ConvertFrom(algorithm))); converter = ConverterManager.GetAlgorithm <HexStringConverter>(); algorithm = converter.ConvertTo(buffer); Assert.True(buffer.SequenceEqual(converter.ConvertFrom(algorithm))); }
private IAlgorithmConverter EnsureConverter(IAlgorithmConverter converter = null) { Converter = converter ?? ConverterManager.GetAlgorithm <HexStringConverter>(); return(Converter); }
/// <summary> /// 构造一个 <see cref="SecurityToken"/>。 /// </summary> /// <param name="g">给定的 <see cref="Guid"/>。</param> /// <param name="converter">给定的 <see cref="IAlgorithmConverter"/>(可选;默认使用 <see cref="HexStringConverter"/>)。</param> public SecurityToken(Guid g, IAlgorithmConverter converter = null) : this(g.ToByteArray()) { EnsureConverter(converter); }