Tôi đang cố gắng tích hợp Lịch Google vào ứng dụng của mình và tôi đang gặp phải một số vấn đề với ủy quyền OAuth khi bỏ qua Chế độ làm mới. Tôi nhận được một AccessToken không có vấn đề, nhưng thuộc tính RefreshToken là null. Xem dòng đánh dấu "LỖI TẠI ĐÂY:" cho nơi tôi đang gặp vấn đềTại sao tôi không nhận được một RefreshToken từ yêu cầu Google OAuth?
My Asp.Net MVC điều khiển (tên OAuthController
) trông giống như sau:
public ActionResult Index()
{
var client = CreateClient();
client.RequestUserAuthorization(new[] { "https://www.googleapis.com/auth/calendar" }, new Uri("http://localhost/FL.Evaluation.Web/OAuth/CallBack"));
return View();
}
public ActionResult CallBack()
{
if (string.IsNullOrEmpty(Request.QueryString["code"])) return null;
var client = CreateClient();
// Now getting a 400 Bad Request here
var state = client.ProcessUserAuthorization();
// ERROR HERE: The RefreshToken is NULL
HttpContext.Session["REFRESH_TOKEN"] = Convert.ToBase64String(Encoding.Unicode.GetBytes(state.RefreshToken));
return JavaScript("Completed!");
}
private static WebServerClient CreateClient()
{
return
new WebServerClient(
new AuthorizationServerDescription()
{
TokenEndpoint = new Uri("https://accounts.google.com/o/oauth2/token"),
AuthorizationEndpoint = new Uri("https://accounts.google.com/o/oauth2/auth"),
ProtocolVersion = ProtocolVersion.V20
}
, _GoogleClientId, _GoogleSecret);
}
tôi thấy trong các tài liệu API của Google, mà Tôi cần đảm bảo rằng yêu cầu access_type
được đặt thành offline
để gửi một RefreshToken. Làm cách nào để đặt giá trị này trong yêu cầu Authenticator của tôi?
Tôi đã rút gọn mã của mình và giờ tôi nhận được lỗi Yêu cầu không hợp lệ 400 khi tìm cách truy vấn Google. –
Tôi đã giải quyết được vấn đề của mình bằng cách mã hóa tay HttpRequests qua lại cho Google. Tôi sẽ vệ sinh và đăng mã dưới dạng câu trả lời –