Owin OAuth提供商Twitter和Microsoft
我对以下行在twitter和microsoft中返回null存在问题:Owin OAuth提供商Twitter和Microsoft,twitter,oauth,owin,Twitter,Oauth,Owin,我对以下行在twitter和microsoft中返回null存在问题: var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 这在帐户控制器中,如下所示: [AllowAnonymous] public async Task<ActionResult> ExternalLoginCallback(string returnUrl) { var loginInfo = await
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
这在帐户控制器中,如下所示:
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await
AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
var result = await SignInManager.ExternalSignInAsync(loginInfo, false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
//case SignInStatus.RequiresVerification:
// return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
case SignInStatus.Failure:
default:
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation", new AccountExternalLoginConfirmationViewModel { Email = loginInfo.Email });
}
}
有人建议在MicrosoftAccountAuthenticationOptions中包含Scope={“wl.basic”,“wl.emails”}。然而,这返回了一个错误的请求。关于如何通过twitter和microsoft登录解决此问题的任何想法
我为microsoft使用的URL是
重定向Url:
注销Url:
主页:
推特
网站:
回拨url:
我也尝试过在live上使用live URL,但在live上仍然是空的
var loginInfo=await AuthenticationManager.GetExternalLoginInfoAsync() 试试这个:
var options = new TwitterAuthenticationOptions
{
SignInAsAuthenticationType = signInAsType,
ConsumerKey = "...",
ConsumerSecret = "...",
Provider = new TwitterAuthenticationProvider()
{
OnAuthenticated = async ctx =>
{
var manager = new OAuth.Manager(
"-your-twitter-access-token-",
"-your-twitter-access-token-secret-",
ctx.AccessToken,
ctx.AccessTokenSecret);
var url = "https://api.twitter.com/1.1/account/verify_credentials.json";
var authzHeader = manager.GenerateAuthzHeader(url, "GET");
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.PreAuthenticate = true;
request.AllowWriteStreamBuffering = true;
request.Headers.Add("Authorization", authzHeader);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception("NOK");
var responseStream = response.GetResponseStream();
var reader = new System.IO.StreamReader(responseStream);
var res = reader.ReadToEnd();
Newtonsoft.Json.Linq.JObject data = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(res);
var claims = new List<Claim>();
claims.Add(new Claim(Core.Constants.ClaimTypes.RawData, ctx.Identity.Claims.ToJsonString()));
claims.Add(new Claim(Core.Constants.ClaimTypes.AccessToken, ctx.AccessToken));
claims.Add(new Claim(Core.Constants.ClaimTypes.AccessTokenSecret, ctx.AccessTokenSecret));
claims.Add(new Claim(Core.Constants.ClaimTypes.Subject, ctx.UserId));
claims.Add(new Claim(Core.Constants.ClaimTypes.Name, data["name"].TokenString()));
claims.Add(new Claim(Core.Constants.ClaimTypes.Locale, GenerateLocale(data["lang"].TokenString())));
claims.Add(new Claim(Core.Constants.ClaimTypes.ZoneInfo, GenerateZone(data["location"].TokenString(), data["time_zone"].TokenString())));
claims.Add(new Claim(Core.Constants.ClaimTypes.WebSite, data["url"].TokenString()));
claims.Add(new Claim(Core.Constants.ClaimTypes.ProfileUrl, "https://twitter.com/" + ctx.ScreenName));
claims.Add(new Claim(Core.Constants.ClaimTypes.Picture, data["profile_image_url"].TokenString()));
await PrepClaims(ctx.Identity, claims);
}
}
}
var options=新的TwitterAuthenticationOptions
{
SignInAsAuthenticationType=signInAsType,
ConsumerKey=“…”,
ConsumerCret=“…”,
Provider=新的TwitterAuthenticationProvider()
{
OnAuthenticated=异步ctx=>
{
var manager=新的OAuth.manager(
“-您的twitter访问令牌-”,
“-您的twitter访问令牌密码-”,
ctx.AccessToken,
ctx.AccessTokenSecret);
变量url=”https://api.twitter.com/1.1/account/verify_credentials.json";
var authzHeader=manager.GenerateAuthzHeader(url,“GET”);
var request=(HttpWebRequest)WebRequest.Create(url);
request.Method=“GET”;
request.PreAuthenticate=true;
request.AllowWriteStreamBuffering=true;
添加(“授权”,authzHeader);
使用(var response=(HttpWebResponse)request.GetResponse())
{
if(response.StatusCode!=HttpStatusCode.OK)
抛出新异常(“NOK”);
var responseStream=response.GetResponseStream();
变量读取器=新系统.IO.StreamReader(responseStream);
var res=reader.ReadToEnd();
Newtonsoft.Json.Linq.JObject数据=(Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(res);
var索赔=新列表();
添加(新声明(Core.Constants.ClaimTypes.RawData,ctx.Identity.claims.ToJsonString());
添加(新的声明(Core.Constants.ClaimTypes.AccessToken,ctx.AccessToken));
添加(新声明(Core.Constants.ClaimTypes.AccessTokenSecret,ctx.AccessTokenSecret));
添加(新声明(Core.Constants.ClaimTypes.Subject,ctx.UserId));
添加(新声明(Core.Constants.ClaimTypes.Name,data[“Name”].TokenString());
添加(新声明(Core.Constants.ClaimTypes.Locale,generateScale(data[“lang”].TokenString()));
添加(新声明(Core.Constants.ClaimTypes.ZoneInfo,GenerateZone(数据[“位置”].TokenString(),数据[“时区”].TokenString()));
添加(新声明(Core.Constants.ClaimTypes.WebSite,data[“url”].TokenString());
添加(新声明(Core.Constants.ClaimTypes.ProfileUrl,)https://twitter.com/“+ctx.ScreenName”);
添加(新声明(Core.Constants.ClaimTypes.Picture,data[“profile\u image\u url”].TokenString());
等待索赔(ctx.Identity,索赔);
}
}
}
Hi,你找到解决这个问题的方法了吗?我也遇到了同样的问题,但我发现的方法都不管用。
var options = new TwitterAuthenticationOptions
{
SignInAsAuthenticationType = signInAsType,
ConsumerKey = "...",
ConsumerSecret = "...",
Provider = new TwitterAuthenticationProvider()
{
OnAuthenticated = async ctx =>
{
var manager = new OAuth.Manager(
"-your-twitter-access-token-",
"-your-twitter-access-token-secret-",
ctx.AccessToken,
ctx.AccessTokenSecret);
var url = "https://api.twitter.com/1.1/account/verify_credentials.json";
var authzHeader = manager.GenerateAuthzHeader(url, "GET");
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.PreAuthenticate = true;
request.AllowWriteStreamBuffering = true;
request.Headers.Add("Authorization", authzHeader);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception("NOK");
var responseStream = response.GetResponseStream();
var reader = new System.IO.StreamReader(responseStream);
var res = reader.ReadToEnd();
Newtonsoft.Json.Linq.JObject data = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(res);
var claims = new List<Claim>();
claims.Add(new Claim(Core.Constants.ClaimTypes.RawData, ctx.Identity.Claims.ToJsonString()));
claims.Add(new Claim(Core.Constants.ClaimTypes.AccessToken, ctx.AccessToken));
claims.Add(new Claim(Core.Constants.ClaimTypes.AccessTokenSecret, ctx.AccessTokenSecret));
claims.Add(new Claim(Core.Constants.ClaimTypes.Subject, ctx.UserId));
claims.Add(new Claim(Core.Constants.ClaimTypes.Name, data["name"].TokenString()));
claims.Add(new Claim(Core.Constants.ClaimTypes.Locale, GenerateLocale(data["lang"].TokenString())));
claims.Add(new Claim(Core.Constants.ClaimTypes.ZoneInfo, GenerateZone(data["location"].TokenString(), data["time_zone"].TokenString())));
claims.Add(new Claim(Core.Constants.ClaimTypes.WebSite, data["url"].TokenString()));
claims.Add(new Claim(Core.Constants.ClaimTypes.ProfileUrl, "https://twitter.com/" + ctx.ScreenName));
claims.Add(new Claim(Core.Constants.ClaimTypes.Picture, data["profile_image_url"].TokenString()));
await PrepClaims(ctx.Identity, claims);
}
}
}