기본적으로이 인증은 2 단계 프로세스입니다. 먼저 GetAuthenticateUrl()
전화를 사용하여 인증 URL을 생성하고 사용자를 해당 URL로 리디렉션해야합니다. 사용자가 성공적으로 인증하면 FourSquare는 code
매개 변수를 전달하여 사용자가 제공 한 리디렉션 URL을 호출합니다. GetAccessToken()
호출로 액세스 토큰을 교환해야합니다. 위는 콜백 함수에서 사용자 컨텍스트를 복구 할 수 있도록 리디렉션 URL에 전달할 수 있습니다 단지 임의의 문자열입니다
public ActionResult UserClicksAuthenticate()
{
var redirectUri = Request.Url.Authority + this.Url.Action("AuthorizeCallback", new {userCode = "userCode"});
var sharpSquare = new SharpSquare(clientId, clientSecret);
var authUrl = sharpSquare.GetAuthenticateUrl(redirectUri);
return new RedirectResult(authUrl, permanent: false);
}
public ActionResult AuthorizeCallback(string code, string userCode)
{
var redirectUri = Request.Url.Authority + this.Url.Action("AuthorizeCallback", new { userCode = userCode });
var sharpSquare = new SharpSquare(clientId, clientSecret);
var accessToken = sharpSquare.GetAccessToken(redirectUri, code);
// need this in order to make calls to API
// it's redundant because token is already set in GetAccessToken() call but it helps to understand the workflow better.
sharpSquare.SetAccessToken(accessToken);
List<VenueHistory> venues = sharpSquare.GetUserVenueHistory();
return View("Index");
}
public ActionResult GetVenues()
{
var sharpSquare = new SharpSquare(clientId, clientSecret, appToken);
List<VenueHistory> venues = sharpSquare.GetUserVenueHistory();
return View("Index");
}
userCode
: 여기
샘플 MVC 코드입니다. 예를 들어, 이것은 페이지 코드, 사용자 ID 또는 이벤트 이름 일 수 있습니다.
업데이트 : : 주제 시동기는 "사용자 없음"액세스에 관심이있었습니다 (FourSquare dev page here 참조). 실제로 이러한 작업을 수행하려면 액세스 토큰을 가져올 필요가 없으며 APP ID & SECRET 만 필요합니다. 실제로 전용 응용 프로그램 ID가 필요합니다
private FourSquareSingleResponse<T> GetSingle<T>(string endpoint, bool unauthenticated) where T : FourSquareEntity
/when calling API 비밀 : SharpSquare implementation 보면, 나는이 bool unauthenticated
매개 변수를 가진 overload가 있습니다 것으로 나타났습니다.
public Venue GetVenue(string venueId)
public List<Venue> SearchVenues(Dictionary<string, string> parameters)
public List<Checkin> GetVenueHereNow(string venueId, Dictionary<string, string> parameters)
public List<Tip> GetVenueTips(string venueId, Dictionary<string, string> parameters)
public List<Photo> GetVenuePhotos(string venueId, Dictionary<string, string> parameters)
public List<Link> GetVenueLinks(string venueId)
public Tip GetTip(string tipId)
public Special GetSpecial(string specialId)
을 당신이 당신의 WebAPI의 행동에 이러한 방법을 호출 할 경우 액세스 토큰을 필요로하지 않는 것을 의미한다 :
이 매개 변수는 다음과 같은 공용 메소드가 호출 될 때 true
로 설정
public ActionResult SearchVenues()
{
var sharpSquare = new SharpSquare(clientId, clientSecret);
List<VenueHistory> venues = sharpSquare.SearchVenues(<<params>>);
return View(venues);
}
2 가지 MVC 작업 대신 하나의 웹 API 작업 내에서 모든 작업을 수행하고 싶습니다. 사용자를 인증하는 것이 아니라 Foursquare API를 호출하여 (내 앱의 자격증 명을 사용하여) 장소 데이터를 가져 오는 것입니다. 그래서 C#'WebClient()를 사용하여이 작업을 수행하는 방법을 궁금합니다. 어떤 아이디어? – Chaddeus
API를 (장소 데이터를 얻기 위해) 호출하려면 액세스 토큰이 있어야합니다. 이미 가지고있는 경우 SharpSquare (APP_ID, APP_SECRET, ACCESS_TOKEN) 생성자를 사용하고 API 함수를 호출해야합니다.내 편집보기 - 거기에 GetVenues() 함수가 추가되었습니다. 그러나 액세스 토큰을 갖고 있지 않으면 암호를 알더라도 FourSquare 로그인 페이지에서 사용자가 로그인하지 않아도 사용자 상호 작용 없이는 액세스 토큰을 얻을 수 없습니다. 이것이 FB, Twitter 및 기타 모든 OAuth2 사이트의 작동 방식입니다. 즉, WebApi 컨트롤러에서 ** 단일 ** 통화로 회의장을 가져올 수 없습니다. – avs099
다시 한번 - 앱 자격 정보 (앱 ID/비밀을 의미한다고 가정 함)는 아무 의미가 없습니다. API 만 사용하면 앱을 호출 할 수 없습니다. 앱은 USER의 컨텍스트에서만 유효합니다. 그래서 액세스 토큰이 필요한 것입니다. 따라서 사용자는 사용자를 대신하여 특정 작업을 수행하도록 앱을 승인해야합니다. 그건 FourSquare 로그인 페이지가 어쩔 수 없다는 것을 의미합니다. 사용자가 앱을 인증 할 수 있도록 사용자를 리디렉션해야합니다. 희망은 그 말이 맞습니다. – avs099