Tag: oauth 2.0

Discord添加公会成员401错误尽管显然有效访问令牌

我是Discord API的新手,我正在开发一个项目,需要能够以编程方式添加一个公会成员。 我已经学会了如何获取授权代码(带有identify和guilds.join范围),将其兑换为访问令牌,并获取用户的ID。 最后一步是使用访问代码和用户ID来添加公会。 此命令详述如下: https://discordapp.com/developers/docs/resources/guild#add-guild-member 我似乎需要向此URL发送PUT请求: https://discordapp.com/api/guilds/[GuildID]/members/[UserID] 但这导致了这种反应: {“code”:0,“message”:“401:未经授权”} 我尝试在Authorization标头中包含访问令牌: 授权:持票人[编辑] 我还尝试在请求中添加JSON主体: { “的access_token”: “[删除]”} 两者都没有奏效。 不出所料,同时使用两者并没有奏效。 我想知道这是否是权限问题,但Discord确认我有guilds.join范围。 这是我在交换访问令牌的授权码时收到的JSON: {“access_token”:“[Redacted]”,“token_type”:“Bearer”,“expires_in”:604800,“refresh_token”:“[Redacted]”,“scope”:“识别guilds.join”} 识别范围有效,因为我能够检索用户及其ID。 但是guilds.join似乎不起作用。 我在下面提供了一些测试代码。 我已经标记了“选项1”和“选项2”行,以表示我通常不会在同一请求中执行这两种访问代码方法。 但正如我之前提到的,我确实尝试了两种方法,但仍然有401错误。 using (WebClient client = new WebClient()) { client.Headers.Add(HttpRequestHeader.ContentType, “application/x-www-form-urlencoded”); client.Headers.Add(HttpRequestHeader.Authorization, “Bearer [Redacted]”);//Option 1 string output = client.UploadString ( “https://discordapp.com/api/guilds/[GuildID]/members/[UserID]”, WebRequestMethods.Http.Put, “{\”access_token\”:\”[Redacted]\”}”//Option 2 ); } 因为我想了解其工作方式的内在性,我宁愿知道如何使用普通的Web请求(例如HttpWebRequest和WebClient,而不是使用某些OAuth库)。

添加Azure Ad Oauth2 JWT令牌声明

我只是想知道是否有办法通过Azure门户添加或指定Azure Ad OAuth2 JWT令牌的自定义声明? 或者这只是可能的代码方面?

在c#中手动解码OAuth承载令牌

在我的基于Web Api 2.2 OWIN的应用程序中,我有一种情况,我手动需要解码承载令牌,但我不知道如何做到这一点。 这是我的startup.cs public class Startup { public static OAuthAuthorizationServerOptions OAuthServerOptions { get; private set; } public static UnityContainer IoC; public void Configuration(IAppBuilder app) { //Set Auth configuration ConfigureOAuth(app); ….and other stuff } public void ConfigureOAuth(IAppBuilder app) { OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), […]

迁移到OAuth 2.0后获取access_token的问题

我尝试将我的应用迁移到OAuth 2.0例程。 我无法从JavaScript API设置的cookie中获取access_token。 我解码了cookie中的信息,但是我获得了代码而不是access_token和用户信息。 这似乎是一个相当奇怪的变化。 是否有任何解决方法,因为当您在获取代码时未指定redirect_uri时,似乎无法将代码交换到access_token。 我已经考虑过从JavaScript API中的响应中获取access_token并将其存储在cookie中,但这有点违背了扩展安全性的全部目的,我想问一下是否有正确的方法来实现它。 可能是我做错了,如果是这样的话请告诉我:) 编辑我知道cookie包含一个签名请求,但根据文档,签名请求应该包含我需要的信息,如access_token和uid,但在我的实例中它只保存代码。 这基本上是我不理解的部分。

使用youtube api v3继续获取错误:redirect_uri_mismatch

嗨,我希望有人可以帮助我。 我在本地计算机上有一个Web应用程序(asp.net),我正在尝试使用此示例将video上传到YouTube https://developers.google.com/youtube/v3/code_samples/dotnet#upload_a_video 当我尝试上传video时,我在Google控制台中为Web应用程序设置了客户端ID和密码,打开浏览器选项卡以选择我的一个Google帐户,一旦我输入redirect_uri_mismatch,该页面上的响应详细信息如下: cookie_policy_enforce=false scope=https://www.googleapis.com/auth/youtube.upload response_type=code access_type=offline redirect_uri=http://localhost:55556/authorize/ pageId=[some page id removed here for security reasons] display=page client_id=[some unique id removed here for security reasons].apps.googleusercontent.com 一个有趣的事情是redirect_uri=http://localhost:55556/authorize/与Google控制台中设置的完全不同,client_secrets.json中的那个也是每次我得到端口号更改的错误页面时都不同。 redurecturl和来源在Google控制台中设置如下我想我已添加所有组合以防万一: 授权重定向URI http://localhost/ https://localhost/ http://localhost:50169/AddContent.aspx https://localhost:50169/AddContent.aspx http://localhost:50169 授权的JavaScript起源 http://localhost/ https://localhost/ http://localhost:50169/ https://localhost:50169/ 我不确定为什么错误页面上的redirect-uri与我在Google控制台中指定的任何授权重定向URI都不匹配? 有任何想法吗 ? 也有可能在Google控制台和我的代码中正确设置了所有内容,但这个错误是由其他东西引发的,例如我错过了我的管帐号上的一些设置? 我没有进行任何设置更改,因为我不认为我必须这样做是正确的?

validation访问令牌 – Asp.Net标识

我正在使用ASP.Net Identity来实现外部登录。 用户登录Google后,我会获得谷歌的外部访问令牌。 然后我对ObtainLocalAccessToken()进行第二次api调用,该调用将外部访问令牌换成新的本地访问令牌。 ObtainLocalAccessToken()调用VerifyExternalAccessToken() ,它通过手动进行http调用和解析user_id来validation提供者的外部访问令牌。 如何利用ASP.NET标识删除整个方法VerifyExternalAccessToken() ? 我相信[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]的用途是什么呢? 我想用该属性修饰ObtainLocalAccessToken()端点并在标题中发送external_access_token( {‘Authorization’ : ‘Bearer xxx’ } ),它应该填充User.Identity而无需手动validation外部访问令牌? 我相信这是目的,但我不能让它发挥作用。 我从谷歌发送一个有效的外部访问令牌,它被401拒绝。 我在Startup.Auth btw中有这一行: app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString(“/Token”), Provider = new ApplicationOAuthProvider(), AuthorizeEndpointPath = new PathString(“/AccountApi/ExternalLogin”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }); 或者,可以使用“/ Token”端点来交换本地端口的外部访问令牌? 哪种方法是正确的?

如何通过Oauth2身份validation使用Google Contacts API

我在下面的代码中使用使用OAuth2的Google Calendar API( https://developers.google.com/google-apps/calendar/ )获取日历条目。 它运作良好。 private IList scopes = new List(); private CalendarService calendarService; private void InitializeCalendarService() { // Add the calendar specific scope to the scopes list scopes.Add(CalendarService.Scopes.Calendar.GetStringValue()); // Display the header and initialize the sample CommandLine.EnableExceptionHandling(); CommandLine.DisplayGoogleSampleHeader(“Google.Api.Calendar.v3 Sample”); // Create the authenticator //FullClientCredentials credentials = PromptingClientCredentials.EnsureFullClientCredentials(); var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description); FullClientCredentials […]

使用OAuth进行Office 365 / EWS身份validation

我正在尝试使用OAuth和EWS托管API登录Office 365 Exchange Online。 我可以使用连接到Office 365 Web API(REST),因此我从Active Directory身份validation库(ADAL)获得了有效的令牌。 现在,我正在尝试使用EWS和TokenCredentials进行连接。 我认为代码非常简单: public static ExchangeService ConnectToServiceWithImpersonation(string token) { var service = new ExchangeService(ExchangeVersion.Exchange2013_SP1); if (true) { service.TraceListener = new TraceListener(); service.TraceFlags = TraceFlags.All; service.TraceEnabled = true; } var credentials = new TokenCredentials(token); service.Credentials = credentials; service.Url = new Uri(“https://outlook.office365.com/EWS/Exchange.asmx”); return service; } 该令牌由ADAL生成,而ADAL又使用“Office 365 API工具 – […]

为什么缓存访问令牌在oauth2中被认为是错误的?

我正在关注此文章以撤消用户访问权限: Enable OAuth Refresh Tokens in AngularJS App using ASP .NET Web API 2, and Owin 现在考虑validation用户后我已经发布了一个30分钟的生命周期的accessstoken,如上文所示,并且刷新令牌为1天,但如果管理员在10分钟内删除该用户20分钟仍然如此,那么现在我需要撤消该用户的访问权限。 为了做到这一点,我需要从刷新令牌表中删除该用户条目以禁止进一步的访问令牌请求,但由于accessstoken到期时间仍然是20分钟,因此用户将能够访问完全错误的受保护资源。 所以我想实现缓存机制来缓存服务器上的访问令牌并保存在数据库中 。 因此,当该用户被撤销时,我可以简单地从缓存和数据库中删除该用户条目,以阻止该用户访问访问受保护资源。 但是下面这两个答案说这不是oauth2的设计方式: 撤消OAuthBearerAuthentication的访问令牌 OAuth2 – 刷新令牌不必要的复杂性 所以我的问题是: 1)为什么缓存访问令牌不被认为比刷新令牌机制更好,也是一种糟糕的方法? 我的第二个问题是基于@Hans Z给出的以下答案,其中他说: 这必然涉及资源服务器(RS)咨询授权服务器(AS),这是一个巨大的开销。 2)如果撤销用户的访问权限,为什么RS会咨询AS,因为AS仅用于validation用户并根据本文生成访问令牌? 3)在文章中只有2个项目: Authentication.api – validation用户并生成访问令牌 资源服务器 – 借助[Authorize]属性validationaccesstoken 在上述情况下,授权服务器呢? 更新:我决定使用刷新令牌撤消用户访问以防用户被删除,并且当用户注销时我将刷新令牌刷新令牌表因为您要求我们在用户点击注销后立即注销用户。 但这里的问题是我有250个与用户相关的角色,所以如果我把角色放在accesstoken中,那么accesstoken的大小将是如此巨大,我们无法从头部传递如此巨大的accessstoken但我无法查询角色以validation每次端点的用户访问权限调用端点。 所以这是我面临的另一个问题。

如何在IdentityServer4中添加自定义声明来访问令牌?

我正在使用IdentityServer4 。 我想添加其他自定义声明来访问令牌,但我无法做到这一点。 我修改了Quickstart5,并按照下面的Coemgen的建议,通过ProfileService添加了ASP.NET Identity Core和自定义声明。 你可以在这里下载我的代码:[zip package] [3]。 (它基于:带有ASP.NET Identity Core的Quickstart5和通过ProfileService添加的声明)。 问题:GetProfileDataAsync未执行。