我们已经创建了一个OAuth2提供程序作为app服务,如下例所示 .

https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

第2步:

我们需要将此 endpoints 配置为Cortana连接的服务OAuth2 endpoints ,以从Cortana应用程序获取访问令牌

Cortana Auth Config

Auth提供程序授权功能中的示例代码如下:

public ActionResult Login()
    {
        var authentication = HttpContext.GetOwinContext().Authentication;
        if (Request.HttpMethod == "POST")
        {
            var isPersistent = !string.IsNullOrEmpty(Request.Form.Get("isPersistent"));

            if (!string.IsNullOrEmpty(Request.Form.Get("submit.Signin")))
            {
                authentication.SignIn(
                    new AuthenticationProperties { IsPersistent = isPersistent },
                    new ClaimsIdentity(new[] { new Claim(ClaimsIdentity.DefaultNameClaimType, Request.Form["username"]) }, "Application"));
            }
        }

       return View();
      //  Response.End();
    }

授权

public ActionResult Authorize()
    {
        if (Response.StatusCode != 200)
        {
            return View("AuthorizeError");
        }


        var authentication = HttpContext.GetOwinContext().Authentication;
        var ticket = authentication.AuthenticateAsync("Application").Result;
        var identity = ticket != null ? ticket.Identity : null;
        if (identity == null)
        {
            authentication.Challenge("Application");
            return new HttpUnauthorizedResult();
        }

        var scopes = (Request.QueryString.Get("scope") ?? "").Split(' ');

        if (Request.HttpMethod == "POST")
        {
             if (!string.IsNullOrEmpty(Request.Form.Get("submit.Grant")))
             {
                identity = new ClaimsIdentity(identity.Claims, "Bearer", identity.NameClaimType, identity.RoleClaimType);
                foreach (var scope in scopes)
                {
                    identity.AddClaim(new Claim("urn:oauth:scope", scope));
                }
                authentication.SignIn(identity);


            }
            //if (!string.IsNullOrEmpty(Request.Form.Get("submit.Login")))
            //{
            //    authentication.SignOut("Application");
            //    authentication.Challenge("Application");
            //    return new HttpUnauthorizedResult();
            //}
        }

        return View();
    }

我想以一种能够将数据发送回Cortana通道的方式更改此代码 . 请告诉我们您的建议 .

谢谢