を動作していないここに私のOAuthAuthorizationOptionsASP.NET APIのOAuth2更新トークンは - 逆シリアル化のチケットが、私はASP.NET API2とOWIN、次のコードでのOAuth 2リフレッシュトークンを実装しています
public static OAuthAuthorizationServerOptions AuthorizationServerOptions
{
get
{
if (_AuthorizationServerOptions == null)
{
_AuthorizationServerOptions = new OAuthAuthorizationServerOptions()
{
AuthenticationType = OAuthDefaults.AuthenticationType,
AllowInsecureHttp = true,
TokenEndpointPath = new PathString(AuthSettings.TokenEndpoint),
AuthorizeEndpointPath = new PathString(AuthSettings.AuthorizeEndpoint),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(AuthSettings.TokenExpiry),
Provider = new CustomOAuthAuthorizationServerProvider(AuthSettings.PublicClientId),
// TODO: Remove the dependency with Thinktecture.IdentityModel library here
AccessTokenFormat = new CustomJWTFormat(),
RefreshTokenProvider = new CustomRefreshTokenProvider()
};
}
return _AuthorizationServerOptions;
}
}
は私CustomRefreshTokenProviderクラスです私は Postman refresh token サーバリターン400不正な要求のステータスコードを以下のようにトークンエンドポイントにPOSTリクエストを送信するために郵便配達を使用している
public override Task CreateAsync(AuthenticationTokenCreateContext context)
{
var identifier = context.Ticket.Identity.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier);
if (identifier == null || string.IsNullOrEmpty(identifier.Value))
{
return Task.FromResult<object>(null);
}
var refreshToken = HashHelper.Hash(Guid.NewGuid().ToString("n"));
var tokenIssued = DateTime.UtcNow;
var tokenExpire = DateTime.UtcNow.AddSeconds(AuthSettings.RefreshTokenExpiry);
context.Ticket.Properties.IssuedUtc = tokenIssued;
context.Ticket.Properties.ExpiresUtc = tokenExpire;
context.Ticket.Properties.AllowRefresh = true;
var protectedTicket = context.SerializeTicket();
AuthService.AddUserRefreshTokenSession(
identifier.Value,
refreshToken,
tokenIssued,
tokenExpire,
protectedTicket);
context.SetToken(refreshToken);
return Task.FromResult<object>(null);
}
public override Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
var refToken = context.Token;
var protectedTicket = AuthService.GetProtectedTicket(refToken);
if (!string.IsNullOrEmpty(protectedTicket))
{
context.DeserializeTicket(protectedTicket);
}
return Task.FromResult<object>(null);
}
。 私はデバッグおよびcontext.DeserializeTicket(protectedTicket) は例外
Exception thrown: 'System.Security.Cryptography.CryptographicException' in System.Web.dll
を投げることがわかった私は AuthSettings.RefreshTokenExpiryは、今から30日間ですので、それが有効期限の問題ではないと思います。 また、私のweb.configにマシンキーを追加しようとしましたOAuth Refresh Token does not deserialize/invalid_grant
まだ動作しません。
アイデアはありますか? すべてのソリューションは高く評価されます。
あなたは解決策を見つけましたか、まったく同じ問題があります。 –
@Amin K遅れて申し訳ありませんが、私はちょうど答えた、それはあなたが必要なものですか? –