private OAuth2Provider GetProvider(string type, bool referer = false) { type = type.ToLower(); Uri uri = Request.Url; string redirect = string.Concat(uri.Scheme, "://", uri.DnsSafeHost, uri.Port != 80 ? string.Concat(":", uri.Port.ToString()) : string.Empty, GetUrl(string.Concat("/oauth2/cb/", type))); if (referer) { string target = Request.QueryString["target"]; if (string.IsNullOrEmpty(target)) { if (Request.UrlReferrer != null) { target = Request.UrlReferrer.ToString(); } } if (!string.IsNullOrEmpty(target)) { redirect = string.Concat(redirect, "?target=", HttpUtility.UrlEncode(target)); } } M.OAuth2 provider = M.OAuth2.GetById(DataSource, type); if (provider != null) { OAuth2ProviderOptions options = new OAuth2ProviderOptions() { ClientId = provider.Key, ClientSecret = provider.Secret, RedirectUri = redirect }; return(OAuth2Provider.Create(options, type)); } return(null); }
/// <summary> /// Request a access token by exchanging a auth code. /// </summary> /// <param name="provider">OAuth2 provider wrapper.</param> /// <param name="redirectUri">URI to redirect back to the system.</param> /// <param name="code">Authorization code.</param> /// <returns>Authentication response object.</returns> public static OAuth2AuthenticateResponse AuthenticateByCode(OAuth2Provider provider, string redirectUri, string code) { var parameters = new Dictionary <string, string> { { "client_id", provider.ClientId }, { "client_secret", provider.ClientSecret }, { "redirect_uri", redirectUri }, { "code", code }, { "grant_type", "authorization_code" } }; if (!string.IsNullOrWhiteSpace(provider.Scope)) { parameters.Add( "scope", provider.Scope); } if (!string.IsNullOrWhiteSpace(provider.State)) { parameters.Add( "state", provider.State); } var reply = request( provider.AccessTokenUri, payload: buildQueryString(parameters)); return(interpretReply(reply)); }
/// <summary> /// Request a new access token by refreshing an old. /// </summary> /// <param name="provider">OAuth2 provider wrapper.</param> /// <param name="refreshToken">Access/refresh token to use.</param> /// <returns>Authentication response object.</returns> public static string AuthenticateByToken(OAuth2Provider provider, string refreshToken) { var parameters = new Dictionary <string, string> { { "client_id", provider.ClientId }, { "client_secret", provider.ClientSecret }, { "refresh_token", refreshToken }, { "grant_type", "refresh_token" } }; if (!string.IsNullOrWhiteSpace(provider.Scope)) { parameters.Add( "scope", provider.Scope); } if (!string.IsNullOrWhiteSpace(provider.State)) { parameters.Add( "state", provider.State); } var reply = request( provider.AccessTokenUri, payload: buildQueryString(parameters)); return(reply); }
void LoadSettings() { OAuth2 = new OAuth2Provider(GetName(), Server.Config.Get(SettingsClientIDKey), Server.Config.Get(SettingsClientSecretKey), "alerts.create alerts.write", "https://streamlabs.com/api/v1.0/authorize", "https://streamlabs.com/api/v1.0/token", ScopeAuthentication, false); }
void LoadSettings() { OAuth2 = new OAuth2Provider(GetName(), Server.Config.Get(SettingsClientIDKey), Server.Config.Get(SettingsClientSecretKey), "playlist-read-private playlist-read-collaborative user-read-playback-state user-modify-playback-state user-read-currently-playing user-read-recently-played", "https://accounts.spotify.com/authorize", "https://accounts.spotify.com/api/token", ScopeAuthentication); }
/// <summary> /// Get user info from the providers user endpoint. /// </summary> /// <param name="provider">OAuth2 provider wrapper.</param> /// <param name="accessToken">Access token to use.</param> /// <returns>Raw data from the provider.</returns> public static string GetUserInfo(OAuth2Provider provider, string accessToken) { var parameters = new Dictionary <string, string> { { "access_token", accessToken } }; return(request( provider.UserInfoUri, "GET", buildQueryString(parameters))); }
public void Cb(string type) { string target = Request.QueryString["target"]; if (string.IsNullOrEmpty(target)) { target = GetUrl("/"); } OAuth2Provider provider = GetProvider(type); if (provider != null) { OAuth2TokenAccess token = provider.Access() as OAuth2TokenAccess; M.OAuth2Member user = provider.GetUserInfo(token); if (!string.IsNullOrEmpty(user.UserId)) { M.Member member; M.LoginStatus status = M.OAuth2Member.Login(DataSource, type.ToLower(), user.UserId, ClientIp, out member); if (status == M.LoginStatus.Success) { PassportAuthentication.SetAuthCookie(true, false, member); OnLogined(member.Id); Refresh(target); } else { if (status == M.LoginStatus.NeedBind) { this["Oauth2Type"] = user.Type; this["Oauth2UserId"] = user.UserId; this["Target"] = target; this["Sms"] = SMSCaptchaSection.GetSection(); Render("oauth2.html"); } else { Redirect(GetUrl("/login")); } } } else { Redirect(GetUrl("/login")); } } else { Redirect(GetUrl("/login")); } }
/// <summary> /// Construct a OAuth2 forwarding URI to redirect with . /// </summary> /// <param name="provider">OAuth2 provider wrapper.</param> /// <param name="redirectUri">URI to redirect back to the system.</param> /// <param name="locale">Language locale for provider interface.</param> /// <returns>URI to redirect system to, for user authorization.</returns> public static string CreateRedirect(OAuth2Provider provider, string redirectUri, string locale = "en") { var parameters = new Dictionary <string, string> { { "client_id", provider.ClientId }, { "display", "page" }, { "locale", locale }, { "redirect_uri", redirectUri }, { "response_type", "code" }, { "approval_prompt", "auto" } }; if (provider.Offline) { parameters.Add( "access_type", "offline"); } if (!string.IsNullOrWhiteSpace(provider.Scope)) { parameters.Add( "scope", provider.Scope); } if (!string.IsNullOrWhiteSpace(provider.State)) { parameters.Add( "state", provider.State); } var qs = buildQueryString(parameters); var url = provider.AuthUri + "?" + qs; return(url); }