c# - 在 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);
}
解决方案
看来这比我想象的要容易。要检索网址,您可以使用:
var clientUri = HttpContext.Current.Request.UrlReferrer.AbsoluteUri;
推荐阅读
- c - 不要在 C++ 2 中生成相同的随机数
- oracle - Oracle 9 数据库作为 SSRS 2017 版本 14.0 中的数据源
- c# - 通过在文本框中输入名称 C# 从 csv 文件中获取全部详细信息
- c++ - 如何在 PIMPL 惯用语后面的接口中隐藏包含自定义 typedef 的 API?
- reactjs - 如何使用 DataSearch 作为 Reactivesearch 的受控组件?
- android - Gson 在序列化时忽略枚举的自定义 @SerializedName 值
- javascript - 服务器端 python 返回一个 zip 文件以供下载
- java - 在 NetBeans 9 和 11 中打包为 DMG 图像,JDK 11 返回“typedef class com.sun.javafx.tools.ant.FXJar cannot be found using the..”
- python - 按等级排序 2D
- c# - ASP.NET Core - 模型绑定测试