Tag: oauth

OWIN中IIS主机的默认OAuth AccessTokenFormat实现是什么?

Web API 2 OWIN承载令牌认证 – AccessTokenFormat null? 默认/令牌端点工作正常,我可以从那里获得令牌,但我需要在票证上使用AccessTokenFormat.Protect方法为externalLogin生成accessToken。 基本上我的实现与这个实现几乎相同,我遇到了同样的问题,即AccessTokenFormat为null。 从文档中说: 用于保护访问令牌中包含的信息的数据格式。 如果应用程序未提供,则默认数据保护提供程序依赖于主机服务器。 IIS上的SystemWeb主机将使用ASP.NET机器密钥数据保护,而HttpListener和其他自托管服务器将使用DPAPI数据保护。 如果分配了不同的访问令牌提供程序或格式,则必须将兼容的实例分配给资源服务器的OAuthBearerAuthenticationOptions.AccessTokenProvider或OAuthBearerAuthenticationOptions.AccessTokenFormat属性。 在我看来,如果未分配AccessTokenFormat,主机将为其提供基本实现。 但我认为它不适用于此。 有没有办法找到ISecureDataFormatAccessTokenFormat的默认实现并手动将其分配给变量? 或者有没有人有其他想法如何解决这个问题? 更新:我获取katana的源代码并找到OAuthAuthorizationServerMiddleware类,从源代码我可以看到以下代码: if (Options.AccessTokenFormat == null) { IDataProtector dataProtecter = app.CreateDataProtector( typeof(OAuthAuthorizationServerMiddleware).Namespace, “Access_Token”, “v1”); Options.AccessTokenFormat = new TicketDataFormat(dataProtecter); } 在我的Startup.Auth中,这是我的代码: static Startup() { PublicClientId = “self”; UserManagerFactory = () => new UserManager(new UserStore(new ApplicationDbContext())); OAuthOptions = new OAuthAuthorizationServerOptions() […]

C#中的OpenID和Google.GData.AccessControl.dll

我正在设计一个使用OpenId的网站,Google是我选择的主要提供商之一。 我想做的是使用Google的日历和联系人(可能是文档)作为每个用户的后备存储。 换句话说,如果我网站上的用户想要访问联系人列表,日历等,他们必须注册他们的Google帐户。 然后他们可以添加/编辑/删除他们内心的内容,因为这是他们的信息。 (是的,我对于我要去的地方有一个特定的想法,只需要弄清楚如何将OpenID绑定到GData。) 是否有人在OpenID / OAuth和使用Google API之间编写了一个平局?

期望在尝试更新推特状态时失败

我似乎无法想出这个。 无论我做什么,我都会收到“417 Expectation failed”错误。 我看过的每个地方都说我需要摆脱HttpWebRequest的Expect标头。 设置静态属性ServicePointManager.Expect100Continue = false或web请求请求中的实例属性request.ServicePoint.Expect100Continue = false永远不会删除标题。 我必须手动将其设置为null才能将其删除。 无论如何,我仍然得到417错误。 我错过了什么? private static readonly MessageReceivingEndpoint UpdateStatusEndpoint = new MessageReceivingEndpoint(“http://twitter.com/statuses/update.xml”, HttpDeliveryMethods.PostRequest); public static XDocument UpdateStatus(ConsumerBase twitter, string accessToken, string message) { var data = new Dictionary(); data.Add(“status”, message); ServicePointManager.Expect100Continue = false; //Doesn’t work HttpWebRequest request = twitter.PrepareAuthorizedRequest(UpdateStatusEndpoint, accessToken, data); request.ServicePoint.Expect100Continue = false; //setting here […]

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库)。

401订阅使用Exchange服务和OAuth的推送通知时未经授权

我正在尝试使用oauth访问EWS托管API(订阅推送通知),如下所示: var authenticationTask = await authenticationContext.AcquireTokenAsync(“https://outlook.office365.com”, new ClientCredential(clientID, clientSecret)); string targetSmtp = “user123@mydomain.onmicrosoft.com”; ExchangeService exchangeService = new ExchangeService(ExchangeVersion.Exchange2013); exchangeService.Url = someURL; exchangeService.TraceEnabled = true; exchangeService.TraceFlags = TraceFlags.All; exchangeService.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.PrincipalName, “user123@mydomain.onmicrosoft.com”); exchangeService.HttpHeaders.Add(“X-AnchorMailbox”, targetSmtp); exchangeService.Credentials = new OAuthCredentials(authenticationTask.AccessToken); PushSubscription subscription = exchangeService.SubscribeToPushNotifications( new[] { someFolder }, new Uri(postBackUrl), 15, null, EventType.NewMail, EventType.Created, EventType.Deleted, EventType.Modified, EventType.Moved, […]

从Google OpenID迁移到新的OAuth 2

我看到有一些问题已经存在,但我找不到任何细节。 我之前使用过自己的DotNetOpenAuth代码,但现在我决定切换到Microsoft Wrapper for Authentication。 无论如何,我发现这个非常好的OAuth客户端: https://github.com/mj1856/DotNetOpenAuth.GoogleOAuth2 它似乎工作正常,但现在它来到迁移部分。 在我当前的登录系统中,我保存了Google返回的完整OpenIDurl,其格式为: https://www.google.com/accounts/o8/id?id= ???????????????????????????? ???? 根据此处的文档https://developers.google.com/accounts/docs/OpenID我应该能够通过新的OAuth系统以某种方式获得该值。 我在Auth请求中包含了“openid.realm”参数。 return BuildUri(AuthorizationEndpoint, new NameValueCollection { { “response_type”, “code” }, { “client_id”, _clientId }, { “scope”, string.Join(” “, scopes) }, { “redirect_uri”, returnUrl.GetLeftPart(UriPartial.Path) }, { “state”, state }, { “openid.realm”, “http://myoldopenidrealm” } }); 据我所知,文档应该是我需要做的全部。 我确保我用于OpenID 2身份validation的Realm是相同的,它也与我的返回URL相同。 在我完成之后,我做了令牌请求,据我所知,我应该看到一个“open_id”字段,但我无法理解如何获取它。 protected override string QueryAccessToken(Uri returnUrl, […]

Instagram授权范围不起作用

关于设置Instagram授权API的范围有一些问题,但在花了一整天后,我仍然无法弄清楚出了什么问题:( 这是我的代码: var url = string.Format(“https://api.instagram.com/oauth/authorize/?client_id={0}&redirect_uri={1}&response_type=code&scope=likes+relationships”, clientId, redirectUrl); return Redirect(url); 我已将likes和relationships范围添加到URL。 但是,当用户登录时,Instagram仅询问Basics和Follow/Unfollow权限而不likes 。 因此,无论我做什么,我都无法代表用户。 很感谢任何forms的帮助。

使用RestSharp为Etsy的API获取signature_invalid调用oauth / request_token

我正在尝试使用RestSharp来访问Etsy的API。 以下是我尝试获取OAuth访问令牌的代码: var authenticator = OAuth1Authenticator.ForRequestToken( ConfigurationManager.AppSettings[“ApiKey”], ConfigurationManager.AppSettings[“ApiSecret”]); // same result with or without this next line: // authenticator.ParameterHandling = OAuthParameterHandling.UrlOrPostParameters; this.Client.Authenticator = authenticator; var request = new RestRequest(“oauth/request_token”) .AddParameter(“scope”, “listings_r”); var response = this.Client.Execute(request); Etsy告诉我签名无效。 有趣的是,当我将请求生成的时间戳和现时值输入到此OAuth签名validation工具中时 ,签名不匹配。 此外,该工具生成的URL与Etsy一起使用,其中RestSharp生成的URL不支持。 有什么我做错了或我需要用RestSharp配置的其他东西? 注意:我正在使用他们的Nuget包提供的RestSharp版本,该版本在发布时为102.5。

如何自定义OAuthAuthorizationServerProvider的错误消息?

我们使用OAuthAuthorizationServerProvider类在我们的ASP.NET Web Api应用程序中进行授权。 如果在GrantResourceOwnerCredentials提供的用户名和密码无效,则调用 context.SetError( “invalid_grant”, “The user name or password is incorrect.” ); 生成以下Json结果: { “error”: “invalid_grant”, “error_description”: “The user name or password is incorrect.” } 有没有办法自定义此错误结果? 我想使它与API的其他部分中使用的默认错误消息格式一致: { “message”: “Some error occurred.” } 这是否可以通过OAuthAuthorizationServerProvider实现?

拒绝令牌请求时自定义OWIN / OAuth HTTP状态代码

我已经派生了OAuthAuthorizationServerProvider以validation客户端和资源所有者。 当我validation资源所有者时,我发现他们的凭据无效,我调用context.Rejected() , HTTP响应带有HTTP / 400错误请求状态代码,而我希望HTTP / 401未经授权 。 如何自定义OAuthAuthorizationServerProvider的响应HTTP状态代码?