Example #1
0
		public async Task<IHttpActionResult> Get()
		{
			AuthRepository auth = new AuthRepository();
			var user = await auth.RegisterUser("test", "123123123");
			var a = await auth.FindUser("test", "123123123");
			return Ok(a);
		}
		public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
		{

			var allowedOrigin = context.OwinContext.Get<string>("as:clientAllowedOrigin") ?? "*";

			context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

			using (var repo = new AuthRepository())
			{
				IdentityUser user = await repo.FindUser(context.UserName, context.Password);

				if (user == null)
				{
					context.SetError("invalid_grant", "The user name or password is incorrect.");
					return;
				}
			}

			var identity = new ClaimsIdentity(context.Options.AuthenticationType);
			identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
			identity.AddClaim(new Claim(ClaimTypes.Role, "user"));
			identity.AddClaim(new Claim("sub", context.UserName));

			var props = new AuthenticationProperties(new Dictionary<string, string>
                {
                    { 
                        "as:client_id", (context.ClientId == null) ? string.Empty : context.ClientId
                    },
                    { 
                        "userName", context.UserName
                    }
                });

			var ticket = new AuthenticationTicket(identity, props);
			context.Validated(ticket);

		}
		public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
		{

			string clientId;
			string clientSecret;
			Client client;

			if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
			{
				context.TryGetFormCredentials(out clientId, out clientSecret);
			}

			if (context.ClientId == null)
			{
				//Remove the comments from the below line context.SetError, and invalidate context 
				//if you want to force sending clientId/secrects once obtain access tokens. 
				context.Validated();
				//context.SetError("invalid_clientId", "ClientId should be sent.");
				return Task.FromResult<object>(null);
			}

			using (var repo = new AuthRepository())
			{
				client = repo.FindClient(context.ClientId);
			}

			if (client == null)
			{
				context.SetError("invalid_clientId", string.Format("Client '{0}' is not registered in the system.", context.ClientId));
				return Task.FromResult<object>(null);
			}

			if (client.ApplicationType == ApplicationTypes.NativeConfidential)
			{
				if (string.IsNullOrWhiteSpace(clientSecret))
				{
					context.SetError("invalid_clientId", "Client secret should be sent.");
					return Task.FromResult<object>(null);
				}
				else
				{
					if (client.Secret != PasswordHashHelper.GetHash(clientSecret))
					{
						context.SetError("invalid_clientId", "Client secret is invalid.");
						return Task.FromResult<object>(null);
					}
				}
			}

			if (!client.Active)
			{
				context.SetError("invalid_clientId", "Client is inactive.");
				return Task.FromResult<object>(null);
			}

			context.OwinContext.Set<string>("as:clientAllowedOrigin", client.AllowedOrigin);
			context.OwinContext.Set<string>("as:clientRefreshTokenLifeTime", client.RefreshTokenLifeTime.ToString());

			context.Validated();
			return Task.FromResult<object>(null);
		}