Tag: oauth 2.0

如何获取谷歌oauth的访问令牌?

我正在使用C#(ASP.NET)。 我想使用Google oauth访问我的应用中的用户个人资料详情。 我成功获得了授权码,但在获取访问令牌时遇到了问题。 我更喜欢Google教程 。 在教程中,我读到我必须发送请求并从谷歌获得响应。 为此,我使用System.Net.HttpWebRequest/HttpWebResponse (我是以正确的方式)。 我用这个代码…. byte[] buffer = Encoding.ASCII.GetBytes(“?code=” + code + “&client_id=xxx&client_secret=xxx&redirect_uri=xxxx&grant_type=authorization_code”); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(“http://accounts.google.com”); req.Method = “POST”; req.ContentType = “application/x-www-form-urlencoded”; req.ContentLength = buffer.Length; Stream strm = req.GetRequestStream(); strm.Write(buffer, 0, buffer.Length); strm.Close(); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); Response.Write(((HttpWebResponse)resp).StatusDescription); 但是,我收到了错误: 远程服务器返回错误:(405)方法不允许。 更新:此处变量code是授权代码。

如何生成OAuth客户端标识符和客户端密钥?

我正在实施一个OAuth2提供程序,我想在我的网站的某个地方开发人员登录并注册第三方应用程序。 但我对如何生成应用程序的客户端标识符和客户端密钥有疑问。 它们应该是唯一的随机代码,还是必须向客户提供一些有意义的信息? 我想他们可能是随机的。 好吧,我一直在寻找有关如何做到这一点的最佳实践,但没有找到那么多。 所以任何答案都将不胜感激。 PD:我在.NET MVC3上开发了一个名为DotNetOpenAuth的库。

如何使用System.IdentityModel.Tokens.Jwt使用Google OAuth2兼容算法RSA SHA-256生成JWT?

我正在尝试创建一个JWT来使用System.IdentityModel.Tokens.Jwt在Google文档中描述的服务帐户进行授权。 我有以下代码: byte[] key = Convert.FromBase64String(“…”); var certificate = new X509Certificate2(key, “notasecret”); DateTime now = DateTime.UtcNow; TimeSpan span = now – UnixEpoch; Claim[] claims = { new Claim(“iss”, “email@developer.gserviceaccount.com”), new Claim(“scope”, “https://www.googleapis.com/auth/plus.me”), new Claim(“aud”, “https://accounts.google.com/o/oauth2/token”), new Claim(“iat”, span.TotalSeconds.ToString()), new Claim(“exp”, span.Add(TimeSpan.FromHours(1)).TotalSeconds.ToString()) }; JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); var descriptor = new SecurityTokenDescriptor { SigningCredentials = […]

如何在Asp.net MVC中编写OAuth2 Web API客户端

我们开发了一组受授权服务器保护的Web API(REST)。 授权服务器已发出客户端ID和客户端密钥。 这些可用于获取访问令牌。 可以在后续调用资源服务器(REST API)时使用有效令牌。 我想编写一个基于Web的(Asp.net MVC 5)客户端,它将使用API​​。 我可以下载一个nuget包来帮助我实现客户端OAuth2流程吗? 任何人都可以指导我在OAuth2流的客户端实现(用asp.net MVC编写)中的一个很好的例子吗? 更新我能够使用下面的代码块获取访问令牌,但我想要的是“客户端凭据”oauth 2流程,我不必输入登录名和密码。 我现在的代码是: public class Startup { public void Configuration(IAppBuilder app) { app.SetDefaultSignInAsAuthenticationType(“ClientCookie”); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active, AuthenticationType = “ClientCookie”, CookieName = CookieAuthenticationDefaults.CookiePrefix + “ClientCookie”, ExpireTimeSpan = TimeSpan.FromMinutes(5) }); app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active, AuthenticationType = OpenIdConnectAuthenticationDefaults.AuthenticationType, SignInAsAuthenticationType = app.GetDefaultSignInAsAuthenticationType(), […]

为Bearer授权添加额外的逻辑

我正在尝试实施OWIN持票人令牌授权,并基于这篇文章 。 但是,在承载令牌中我需要一条额外的信息,我不知道如何实现。 在我的应用程序中,我需要从持有者令牌中推断出用户信息(比如userid)。 这很重要,因为我不希望授权用户能够充当其他用户。 这可行吗? 它甚至是正确的方法吗? 如果用户标识是guid,那么这很简单。 在这种情况下,它是一个整数。 授权用户可能只是通过猜测/暴力来冒充他人,这是不可接受的。 看看这段代码: public void ConfigureOAuth(IAppBuilder app) { OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new SimpleAuthorizationServerProvider() }; // Token Generation app.UseOAuthAuthorizationServer(OAuthServerOptions); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider { public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext […]

JWT和Web API(JwtAuthForWebAPI?) – 寻找一个例子

我有一个Angular前面的Web API项目,我想使用JWT令牌来保护它。 我已经进行了用户/通过validation,所以我认为我只需要实现JWT部分。 我相信我已经确定了JwtAuthForWebAPI所以使用它的一个例子会很棒。 我假设任何未使用[Authorize]修饰的方法都会像往常一样运行,并且如果客户端传递的令牌不匹配,则[Authorize]修饰的任何方法都将为401。 我还不知道如何在初始身份validation时将令牌发送回客户端。 我正在尝试使用魔术字符串开始,所以我有这个代码: RegisterRoutes(GlobalConfiguration.Configuration.Routes); var builder = new SecurityTokenBuilder(); var jwtHandler = new JwtAuthenticationMessageHandler { AllowedAudience = “http://xxxx.com”, Issuer = “corp”, SigningToken = builder.CreateFromKey(Convert.ToBase64String(new byte[]{4,2,2,6})) }; GlobalConfiguration.Configuration.MessageHandlers.Add(jwtHandler); 但我不确定最初是如何回到客户端的。 我想我理解如何在客户端上处理这个问题,但是如果你还可以展示这种交互的Angular方面,还可以获得奖励积分。

使用适用于.NET的YouTube v3 Data API,如何获得刷新令牌?

我需要能够使用刷新令牌,以便在访问令牌过期后重新validation令牌。 如何使用C#v3 API执行此操作? 我查看了UserCredential类和AuthorizationCodeFlow类,没有任何内容向我跳出来。 我正在使用以下代码对其进行身份validation。 var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()). AuthorizeAsync(CancellationToken.None); if (result.Credential != null) { var service = new YouTubeService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = “YouTube Upload Tool” }); } 这是我的AppFlowMetadata类。 public class AppFlowMetadata : FlowMetadata { private static readonly IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = […]

WebAPI OAuth注销 – 如何删除令牌Cookie?

我有一个OAAP登录的WebAPI配置如下: app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { ClientId = clientId, Authority = authority, PostLogoutRedirectUri = “https://www.microsoft.com/”, Notifications = new OpenIdConnectAuthenticationNotifications { AuthenticationFailed = context => { context.HandleResponse(); context.Response.Redirect(“/Error?message=” + context.Exception.Message); return Task.FromResult(0); } } }); 和使用登录强制执行所有控制器 config.Filters.Add(new System.Web.Http.AuthorizeAttribute()); 我现在想要添加一个名为LogoutController的ApiController(猜猜它是做什么的)。 我发现我可以使用从MVC注销 System.Web.Security.FormsAuthentication.SignOut(); 但我没有这样从WebAPI注销。 我还没有找到任何有关如何从WebAPI注销的信息。 但是我发现注销过程中可能存在错误,cookie被保留并且必须手动删除 ,但是,代码再次是MVC,似乎我无法将HttpCookie放入我的HttpResponseMessage对象中: [HttpGet] public HttpResponseMessage Logout() { FormsAuthentication.SignOut(); // clear authentication cookie HttpCookie cookie1 […]

Asp.Net MVC LinkedIn OAuth 2.0登录令人惊叹

LinkedIn登录已突然停止工作,错误代码错误= access_denied ,代码库或包中没有任何更改。 根据文档错误代码access_denied ,表示用户已拒绝许可,但即使给予权限也会发生,我们只请求默认信息电子邮件ID。 问题是返回的用户信息始终为null。 使用的Nuget包是Owin.Security.Providers.LinkedIn :2.22.0,我们试图更新它,但它没有解决问题。 为了诊断我们检查了LinkedIn应用程序设置它看起来很好,也登录工作通过javascript sdk相同的应用程序ID,所以问题似乎不是与应用程序ID。 在github中没有与它相关的问题。 所以,不确定根本问题在哪里。 任何指针或问题的解决方案都会有所帮助。

当Authorize标记不包含角色时,我没有获得范围复选框,Ajax授权请求也没有发送范围

更新2:如果我从这里更改我的控制器授权标签 [Authorize] 对此 [Authorize(Roles = “Read”)] 然后我得到范围选择的复选框,ajax令牌请求包含正确的范围并成功完成。 然而,我仍然以红色感叹号结束。 看起来Swagger或Swashbuckle要求角色与范围定义匹配? 使用Swashbuckle时是否可以使用没有定义角色的应用程序流程? 如果是这样,你怎么做到这一点? 我是否必须在操作filter类中手动设置范围? 如果在Authorize标记中没有列出Roles就无法使用Swashbuckle,那么我需要知道如何在IdentityServer3中分配客户端角色。 更新3如果我将操作filter更改为类似的范围,则会显示范围,但在选择范围并单击“授权”后,页面将重新加载。 首先成功发送了ajax授权。 这是更接近,但授权仍然没有坚持(不知道在这里使用什么术语,但坚持似乎总结了。)我如何获得授权坚持? public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { var scopes = new List() { “Read” }; if (scopes.Any()) { if (operation.security == null) operation.security = new List<IDictionary<string, IEnumerable>>(); var oAuthRequirements = new Dictionary<string, IEnumerable> { { “oauth2”, scopes […]