Tag: oauth 2.0

如何为GoogleWebAuthorizationBroker.AuthorizeAsync设置return_uri?

我正在尝试在非MVC .NET Web应用程序中使用Google Calendar API 。 (这似乎是一个重要的区别。) 我试图在谷歌和Daimto的这个例子中使用这个例子中的代码以及来自这里的一些相关post的一些有用的提示。 我写了以下方法: public void GetUserCredential( String userName ) { String clientId = ConfigurationManager.AppSettings[ “Google.ClientId” ]; //From Google Developer console https://console.developers.google.com String clientSecret = ConfigurationManager.AppSettings[ “Google.ClientSecret” ]; //From Google Developer console https://console.developers.google.com String[] scopes = new string[] { Google.Apis.Calendar.v3.CalendarService.Scope.Calendar }; // here is where we Request the user to […]

ASP.Net OAuth授权服务器:添加一个数组作为附加响应参数

我已经实现了一个自定义的OAuthAuthorizationServerProvider ,我希望在我的客户端请求访问令牌时在响应中添加一些其他元素。 为此,我重写了OAuthAuthorizationServerProvider.TokenEndpoint方法,并成功设法添加了一些单个元素(通过将它们添加到context.AdditionalResponseParameters字典中)。 现在我有这样的回应: { “access_token”: “wxoCtLSdPXNW9KK09PVhSqYho…”, “token_type”: “bearer”, “expires_in”: 1199, “refresh_token”: “uk0kFyj4Q2OufWKt4IzWQHlj…”, “toto”: “bloblo”, “tata”: “blabla” } 这很棒,但我的目标是添加一个数组以获得这种响应: { “access_token”: “wxoCtLSdPXNW9KK09PVhSqYho…”, “token_type”: “bearer”, “expires_in”: 1199, “refresh_token”: “uk0kFyj4Q2OufWKt4IzWQHlj…”, “scopes”: [“read”, “write”] } 我试图添加一个json解析的列表或数组而不是一个简单的字符串,但它给了我 “scopes”: “[\”read\”,\”write\”]” 这是解析为Json的字符串,而不是Json数组:/ 如何在TokenEndpoint响应中添加Json数组?

“无限循环ASP.NET MVC和Azure Active Directory B2C

我试图只允许具有角色“全局管理员”的Azure Active Directory B2C用户访问以下类(这就是我包含Authorize命令的原因): [Authorize(Roles = “admin”)] public class UserProfileController : Controller { … controller class … } 我的Startup类看起来像这样: public partial class Startup { private static string clientId = ConfigurationManager.AppSettings[“ida:ClientId”]; private static string appKey = ConfigurationManager.AppSettings[“ida:ClientSecret”]; private static string aadInstance = ConfigurationManager.AppSettings[“ida:AADInstance”]; private static string tenantId = ConfigurationManager.AppSettings[“ida:TenantId”]; private static string postLogoutRedirectUri = ConfigurationManager.AppSettings[“ida:PostLogoutRedirectUri”]; // […]

WebApi OAuth UseOAuthBearerAuthentication给出“Sequence包含多个元素”错误

我按以下方式配置了我的WebApi OAuth 2.0: app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions { Provider = new OAuthBearerAuthenticationProvider(), }); app.UseOAuthBearerTokens(OAuthOptions); 但它在每个请求时给出了以下错误: Message : An error has occurred. ExceptionMessage : Sequence contains more than one element ExceptionType : System.InvalidOperationException StackTrace : at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source) at Microsoft.Owin.Security.AuthenticationManager.d__8.MoveNext() — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task […]

服务应用程序的Google oAuth 2.0(JWT令牌请求)

我正在尝试为此处描述的服务帐户实施Google oAuth 2:在UnityScript上使用https://developers.google.com/accounts/docs/OAuth2ServiceAccount (或C# – 这无关紧要,因为它们都使用相同的Mono .NET类)。 我在这里找到了类似的主题: C#中是否有JSON Web Token(JWT)示例? web-token-jwt-example-in-c但我仍然没有成功。 首先,我已生成标题和声明集(就像在谷歌文档中一样) var header: String = GetJWTHeader(); var claimset: String = GetJWTClaimSet(); 结果是(为清晰起见,用新行分隔): { “ALG”: “RS256”, “典型”: “智威汤逊”} { “ISS”: “425466719070-1dg2rebp0a8fn9l02k9ntr6u5o4a8lp2.apps.googleusercontent.com” “范围”:“ https://www.googleapis.com/auth/prediction ”, “aud”:“ https://accounts.google.com/o/oauth2/token ”, “EXP”:1340222315, “IAT”:1340218715} Base-64编码方法: public static function Base64Encode(b: byte[]): String { var s: String = Convert.ToBase64String(b); s = […]

使用OAuth 2和服务帐户访问旧的GData API(电子表格API)

简短的问题是这是否可能,如果可能,如何? 大纲 我有一个.NET应用程序,它目前使用服务帐户使用Google Drive API访问Google Apps域中的信息。 这可以正常使用google-api-dotnet-client库和代码沿着这里的示例所示的相同行 – 这是目前我正在做的非常好的基本示例。 我现在要做的是扩展它,以及使用 “新”google-api-dotnet-client库提供的那些API ,它使用旧的“GData”库,通过较旧的google-gdata库提供 ,特别是Spreadsheets API(也许还有更多)。 问题 这就是出现困难的地方。 前一个库正是我想要的,正如上面第一段中的第二个链接所certificate的那样 – 以及我自己做它的事实。 但是 ……虽然第二个库已经更新以支持OAuth 2.0以及其他旧的auth技术,但它没有 – 据我所知,从广泛的谷歌搜索和追踪错误 – 允许“代表我所有用户的服务帐户“我需要的操作。 我的问题是我是否遗漏了一些东西(可能很难找到或没有记录的东西),这些东西可以让我做我想做的事。 如果失败了,有什么方法可以强迫这种行为并使这两个库并排运行? 理想的解决方案 理想情况下,我会喜欢某种方式让Google.GData.Spreadsheets.SpreadsheetsService实例能够利用我已经在某种程度上使用的Google.Apis.Authentication.Auth2Authenticator实例。 这种巫术有可能吗? 我错过了那个显而易见的东西吗? 如果不这样做,我很高兴再次完成整个OAuth2“断言流客户端”的舞蹈,如果我不得不以旧版图书馆可以处理的方式。 救命? 其他想法 我考虑过 – 暂时拒绝 – 选择从头开始编写我自己的库来实现这一目标。 这有两个原因: gdata库已经存在,并且已经被许多人开发,可能比我自己聪明。 我不是那么傲慢,我相信我能做得更好。 我不确定这些旧API上是否支持/允许使用服务帐户方法的OAuth2。 我一直希望避免但可能不得不依赖于这里的答案的另一种方法是使用双腿OAuth 1.0来实现这一点。 我不愿意,因为应用程序的某些部分依赖于一种旧的auth方法,而其他部分则使用这种新方式对我来说感觉不对。 还有更多的问题…… 更新 我已经考虑过inheritanceGDataRequestFactory和GDataRequest的可能性,所以我可以创建自己的请求工厂,并使用Google.Apis.Authentication.Auth2Authenticator的实例(好吧,无论如何, Google.Apis.Authentication.IAuthenticator的实例)它可以在调用之前介入validation请求。 但是…… GDataRequest的构造函数是内部的,这已经阻止了我。 它真的看起来像是不应该的。

基于令牌的webapi实现以保护端点

我有一个带有Web服务的Web应用程序,客户端将使用我的Web应用程序注册他们的应用程序。 现在,客户端将拥有SPA或移动应用程序的应用程序 ,他们将从他们的应用程序中使用我的Web服务。 所以我将实现基于令牌的机制来保护对我的端点的访问。 1)但是在这里我很困惑,我应该使用任何框架来生成访问令牌,或者我可以使用任何库,它将生成任何随机字符串,我将在响应中发送。例如这样的事情: TokenId = Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Replace(“+”, “_”) 因此,在注册应用程序时,如果客户端已为其应用程序启用了身份validation,则将validation用户,然后我将返回访问令牌,并使用该用户ID保存在数据库中的accesstoken。 所以我的数据库表如下所示,用于存储经过validation的accesstoken: Id(autogenerated) accesstoken userid clientid createdat expiresat 因此,在用户进行身份validation后,现在如果用户想要访问任何受保护资源,则用户需要在后续调用头中传递此访问令牌。 所以我要做的是,我将从头部获取访问令牌,然后validation对该数据库的accessstoken,然后允许访问我的受保护资源,其他明智的用户将获得授权。 我已经看到很多与此相关的事情,所以基本上这是oauth2,我想实现这个。 我见过Openid connect (这个项目甚至不编译),它位于oauth2之上,用于身份validation,oauth2将用于授权。 但在这里,因为我在我的数据库中存储访问令牌,所以这是我的疑问: 2)现在我需要openconnectid(但是这个项目甚至没有编译)来validation访问令牌,或者因为我在我的数据库中存储访问令牌,我不需要openconnectid? 3)我想实现asp.net身份,但后来我将收到动态数据库连接字符串,因为我看到asp.net身份主要与entity framework一起工作我找不到任何我可以使用ado.net来validation用户名的来源和密码使用SQL查询。 我知道我可以这样做: 创建一个实现IUser的自定义用户类,如此处所述定义实现的自定义用户存储 public class UserStoreService : IUserStore, IUserPasswordStore 但我没有这个信息,因为我没有固定连接string.connection字符串再次存储在客户端注册的数据库中。 4)我们已经为用户提供了一个固定的端点,客户端可以通过该端点创建管理员,因此我将使用我的RSA算法进行密码散列,然后将其存储在数据库中。 那么现在我需要使用asp.net身份吗? 5)我已经看到很多以下链接与基于令牌的实现,但我没有得到他们在哪个部分validationaccesstoken但现在因为我有存储在我的数据库中的accesstoken我是否需要使用以下任何实现? JSON Web Token in ASP.NET Web API 2 using Owin Token Based Authentication using ASP.NET Web […]

使用OAuth2在Office 365中进行IMAP身份validation

我在我的程序中使用IMAP客户端。 我正在尝试使用OAuth2机制(使用这些说明 )通过IMAP客户端访问Office 365 Outlook。 当我在IMAP客户端中进行身份validation时 – 身份validation失败,但Google和Outlook.com的OAuth2身份validation工作正常。 Office 365是否支持IMAP中的OAuth2身份validation? 如果确实如此,如何进行身份validation?

OAuth2资源所有者密码通过API授予

我目前正在构建一个需要OAuth2的API,但无法找到一个可以通过RESTful API处理原生移动应用中单点登录的库。 大多数我发现只有一个网络弹出窗口,已被否决该项目。 目前正在运行的B2C无法使用ROPG。 有没有办法使用C#.NET和Azure轻松地设置另一个库? 更新: 尝试使用B2C每个Fei Xue回答下面的问题,我们得到了从Microsoft Graph获取访问令牌的重点。 在POST的主体中,我们做了以下事情: resource = https%3A%2F%2FGraph.windows.net&client_id = [B2C设置 – 应用程序 – AppId]&grant_type =密码&用户名= rob%40 [租户] .onmicrosoft.com&密码= [密码]&client_secret = [B2C设置 – 应用程序 – 应用程序密钥 – client_secret] 我们对命名空间的错误是由于我们尝试的用户名。 这是一个使用电子邮件作为用户名的B2C租户,这就是命名空间错误的原因。 我们解决该错误的唯一方法是创建一个B2C用户,其电子邮件地址以租户结尾,如下所示: 抢劫@ [租户] .onmicrosoft.com 我们现在正在获取访问令牌,但该令牌不会使用我们的azure app service api app进行身份validation,这是最初的目标。 我们要完成的是发送对B2C登录有效的用户名和密码,并获得对api应用程序有效的IdToken或Access Token。 api应用程序通过AppA身份validation设置连接到B2C,该设置为AAD配置了客户端ID和来自B2C设置应用程序的秘密设置。 更新: 我们在Azure web api中尝试通过graph.windows.net令牌进行身份validation,我们在https://Graph.windows.net允许的令牌受众中添加了我们的App Service – 身份validation – Active […]

如何使用OAuth 2.0对Azure Active Directory进行身份validation?

我有一个用C#编写的REST API,我需要使用现有的Azure AD服务进行身份validation。 我目前拥有希望进行身份validation的用户的用户名和密码。 我需要使用Azure AD进行身份validation,并从服务器接收访问令牌。 有人可以指点我解释如何做到这一点的一些文章/教程的方向?