public async Task <ActionResult <DeviceCode> > GetDeviceCodeByDeviceCodeAsync(string deviceCode)
        {
            // validate client
            var clientResult = await _clientValidator.ValidateAsync(this.HttpContext);

            if (clientResult.Client == null)
            {
                return(Unauthorized(OidcConstants.TokenErrors.InvalidClient));
            }

            var grantType = clientResult.Client.AllowedGrantTypes.FirstOrDefault(agt => agt == OidcConstants.GrantTypes.DeviceCode);

            if (grantType == null)
            {
                return(Unauthorized(OidcConstants.TokenErrors.InvalidGrant));
            }

            var result = await _deviceFlowStore.FindByDeviceCodeAsync(deviceCode);

            if (result == null)
            {
                return(NotFound());
            }
            return(result);
        }
Ejemplo n.º 2
0
    public async Task StoreDeviceAuthorizationAsync()
    {
        await _deviceFlowStore.StoreDeviceAuthorizationAsync(
            "DeviceCode-Test1",
            "UserCode-Test1",
            new DeviceCode
        {
            ClientId         = "ClientId1",
            AuthorizedScopes = new string[] { "s1", "s2" },
            IsAuthorized     = true,
            Lifetime         = 42,
            RequestedScopes  = new string[] { "rs1" },
            Subject          = new ClaimsPrincipal(
                new[]
            {
                new ClaimsIdentity(new[]
                {
                    new Claim(JwtClaimTypes.Subject, "sid1")
                })
            }
                )
        }
            );

        void Check(DeviceCode deviceCode)
        {
            deviceCode.ClientId.ShouldBe("ClientId1");
            deviceCode.AuthorizedScopes.ShouldNotBeNull();
            deviceCode.AuthorizedScopes.Count().ShouldBe(2);
            deviceCode.AuthorizedScopes.ShouldContain("s1");
            deviceCode.AuthorizedScopes.ShouldContain("s2");
            deviceCode.IsAuthorized.ShouldBeTrue();
            deviceCode.Lifetime.ShouldBe(42);
            deviceCode.RequestedScopes.ShouldNotBeNull();
            deviceCode.RequestedScopes.Count().ShouldBe(1);
            deviceCode.RequestedScopes.ShouldContain("rs1");
            deviceCode.Subject.ShouldNotBeNull();
            deviceCode.Subject.Claims.ShouldContain(x => x.Type == JwtClaimTypes.Subject && x.Value == "sid1");
        }

        Check(await _deviceFlowStore.FindByUserCodeAsync("UserCode-Test1"));
        Check(await _deviceFlowStore.FindByDeviceCodeAsync("DeviceCode-Test1"));
    }
Ejemplo n.º 3
0
        public async Task <ActionResult> FindByCode(string userCode = null, string deviceCode = null)
        {
            if (string.IsNullOrWhiteSpace(userCode) &&
                string.IsNullOrWhiteSpace(deviceCode))
            {
                return(StatusCode(403));
            }

            if (!string.IsNullOrWhiteSpace(userCode))
            {
                return(Ok(await _store.FindByUserCodeAsync(userCode)));
            }

            return(Ok(await _store.FindByDeviceCodeAsync(deviceCode)));
        }
 /// <summary>
 /// Finds device authorization by device code.
 /// </summary>
 /// <param name="deviceCode">The device code.</param>
 /// <returns></returns>
 public Task <DeviceCode> FindByDeviceCodeAsync(string deviceCode)
 {
     return(_store.FindByDeviceCodeAsync(deviceCode.Sha256()));
 }
    /// <summary>
    /// Finds device authorization by device code.
    /// </summary>
    /// <param name="deviceCode">The device code.</param>
    /// <returns></returns>
    public Task <DeviceCode> FindByDeviceCodeAsync(string deviceCode)
    {
        using var activity = Tracing.StoreActivitySource.StartActivity("DefaultDeviceFlowCodeService.FindByDeviceCode");

        return(_store.FindByDeviceCodeAsync(deviceCode.Sha256()));
    }