首页 > 解决方案 > 在 MVC OWIN 中的授权服务器中检索资源服务器的 url

问题描述

我已经配置了一个授权服务器,并且我有多个资源服务器。我已经设置了一个端点来在我的身份验证服务器中注册用户,但是,我向用户发送了一封通用电子邮件以确认他们的电子邮件。问题是,我希望确认后的回调链接返回到发起初始请求的任何资源服务器,并将它们引导回相关网站进行登录。当我注册时,我需要随身携带,请告知,并查看下面的注册端点:

/// <summary>
    /// Register a new user
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            var errors = new List<string>();
            foreach (var modelState in ModelState.Values)
            {
                foreach (var error in modelState.Errors)
                {
                    errors.Add(error.ErrorMessage);
                }
            }
            var errorResponse = new Response<RegisterResponse>
            {
                IsSuccessful = false,
                Message = "Invalid Request",
                Data = new RegisterResponse
                {
                    Errors = errors
                }
            };
            return new ErrorMessageResult<Response<RegisterResponse>>(errorResponse);
        }

        var user = new User
        {
            UserName = model.Email,
            Email = model.Email,
            FirstName = model.FirstName,
            LastName = model.LastName,
            IDNumber = model.IDNum,
            PassportNumber = model.PassportNo,
            CellphoneNumber = model.CellNo,
            PhoneNumber = model.PhoneNo,
            Company = model.Company
        };

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        if (result.Succeeded)
        {
            // Send an email with this link
            var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
            var req = Request.GetOwinContext().Request;
            string baseUrl = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority +
                             HttpContext.Current.Request.ApplicationPath.TrimEnd('/') + "/";
            var newRouteValues = new RouteValueDictionary(new {userId = user.Id, code = code, clientUrl = "http://www.google.co.za"}) {{"httproute", true}};
            var urlHelper = new System.Web.Mvc.UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes);
            string callbackUrl = urlHelper.Action(
                "ConfirmEmail",
                "Account",
                newRouteValues,
                HttpContext.Current.Request.Url.Scheme
            );

            var emailModel = new EmailModel
            {
                TemplateName = "ConfirmAccountEmail",
                Url = callbackUrl,
                ToName = User.Identity.Name
            };
            var data = JsonConvert.SerializeObject(emailModel);
            await UserManager.SendEmailAsync(user.Id, "User Authentication Service: Email Confirmation", data);
        }

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        var response = new Response<RegisterResponse>
        {
            Message = "User successfully registered",
            IsSuccessful = true,
            Data = new RegisterResponse
            {
                UserId = user.Id,
                FirstName = user.FirstName,
                EmailAddress = user.Email,
                LastName = user.LastName
            }
        };
        return Ok(response);
    }

标签: c#asp.net-mvcoauth-2.0owinhttpcontext

解决方案


看来这比我想象的要容易。要检索网址,您可以使用:

var clientUri = HttpContext.Current.Request.UrlReferrer.AbsoluteUri;


推荐阅读