Wie erneuern der access token mit der refresh-token?
Ich bin mit ASP.NET MVC 5 mit OWIN.
Ich habe eine Menge Forschung und haben nicht gefunden, wie das erneuern der access token mit der refresh-token.
Mein Szenario ist: Das erste mal, die Benutzer auf meiner app, er oder Sie gewährt Zugriff auf das Konto, das ich Lesen Sie die refresh-token zurückgegeben, die von der API. Wenn der Benutzer wieder auf meine app, ich brauche zu aktualisieren, die access token auf der Basis der "Refresh Token".
Könnte jemand bieten einige code?
Hier ist, was habe ich erreicht bis jetzt:
Start.Auth.cs:
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
Caption = "Google+",
ClientId = Parameters.Instance.Authentication.oAuth.GooglePlus.ClientId,
ClientSecret = Parameters.Instance.Authentication.oAuth.GooglePlus.ClientSecret,
CallbackPath = new PathString("/oauth-login-return"),
Provider = new GoogleOAuth2AuthenticationProvider
{
OnAuthenticated = async context =>
{
context.Identity.AddClaim(new Claim(ClaimTypes.Name, context.Identity.FindFirstValue(ClaimTypes.Name)));
context.Identity.AddClaim(new Claim(ClaimTypes.Email, context.Identity.FindFirstValue(ClaimTypes.Email)));
context.Identity.AddClaim(new Claim("picture", context.User.GetValue("picture").ToString()));
context.Identity.AddClaim(new Claim("profile", context.User.GetValue("profile").ToString()));
context.Identity.AddClaim(
new Claim(Parameters.Instance.Authentication.oAuth.GooglePlus.AccessTokenClaimType,
context.AccessToken));
}
}
};
googleOAuth2AuthenticationOptions.Scope.Add("https://www.googleapis.com/auth/plus.login");
googleOAuth2AuthenticationOptions.Scope.Add("https://www.googleapis.com/auth/userinfo.email");
AuthenticationController:
[HttpPost]
[AllowAnonymous]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
RedirectIfAuthenticated();
return new ChallengeResult(provider, Url.Content("~/oauth-login-callback"));
}
[ActionName("oauth-login-back")]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
}
//Used for XSRF protection when adding external logins
private const string XsrfKey = "XsrfId";
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
private class ChallengeResult : HttpUnauthorizedResult
{
public ChallengeResult(string provider, string redirectUri)
: this(provider, redirectUri, null)
{
}
private ChallengeResult(string provider, string redirectUri, string userId)
{
LoginProvider = provider;
RedirectUri = redirectUri;
UserId = userId;
}
private string LoginProvider { get; set; }
private string RedirectUri { get; set; }
private string UserId { get; set; }
public override void ExecuteResult(ControllerContext context)
{
var properties = new AuthenticationProperties { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
}
}
InformationsquelleAutor der Frage Marco Alves | 2014-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage ist nicht doppelte AN ALLE. Ich hoffe, dass dies anderen helfen, nicht zu verbringen Tage, die ich verbracht haben.
Nach fast 4 Tagen habe ich herausgefunden, wie man eine frische access token in die google-api mit OWIN.
Werde ich die Lösung posten, aber zuerst MUSS ich sagen, dass das, was mir geholfen hat, starten Sie bekommen eine Ahnung, mein Fehler war das einrichten der Debug-Symbole für das Katana-Projekt. Finden Sie unter diesem link:
http://www.symbolsource.org/Public/Home/VisualStudio
Diesem Bild veranschaulichen die Konfiguration von Debug-Symbolen-Server.
Und dieser zeigt den Katana-Debug-Symbole geladen.
Danach fand ich heraus, dass mein problem war, dass Google-API war die Rückkehr 403: Forbidden
"Zugriff Nicht Konfiguriert. Bitte verwenden Sie Google Entwickler-Konsole zur Aktivierung der API für Ihr Projekt"
Dann, gefunden auf stack overflow diesen Beitrag:
"Zugriff Nicht Konfiguriert. Bitte verwenden Sie Google Entwickler-Konsole zur Aktivierung der API für Ihr Projekt."
genauer gesagt diese Antwort: https://stackoverflow.com/a/24401189/833846
Danach ging ich zu Google Entwickler-Konsole und setup von Google+ API
Dann, voillá! Es arbeitete.
Nun der code, um einen frischen Zugang token mit der refresh-token (ich habe nicht gefunden, einen Weg, um zu erreichen, dass Sie mit der OWIN-API).
WICHTIGEN 1: Um einen refresh-token müssen Sie die "access_type" zu "offline" in der "ExecuteResult" - Methode, auf diese Weise:
WICHTIGE 2: Sobald Sie Ihre refresh-token, müssen Sie es speichern, und in einigen sicheren Quelle. Google-API nicht Problem Sie ein neues refresh token, es sei denn, Sie "approval_prompt" zu "zwingen" rufen Sie vor der Zeile (in der gleichen Methode):
Ich empfehle auch einen Blick auf:
InformationsquelleAutor der Antwort Marco Alves
Verbrachte die letzten zwei Tage, herauszufinden, wie das erneuern der access-token selbst. Die Antwort ist geschrieben in einem anderen thread hier:
Wie Google-API-V 3.0 .Net-library und die Google-OAuth2 Umgang mit refresh token
InformationsquelleAutor der Antwort Ogglas