/// <summary> /// Initializes a new instance of the <see cref="AuthenticateResult" /> class. This /// version of the constructor indicates a partial login (with a redirect) without /// knowledge of the subject claim. /// </summary> /// <param name="redirectPath">The redirect path. This should be relative to the /// current web server. The <c>"~/"</c> prefix is supported to allow application-relative /// paths to be used (e.g. "~/path"). /// </param> /// <param name="externalId">The external identifier that represents the external identity /// provider the partial login is created from. This will be re-presented to correlate the request /// when the user resumes from the redirect.</param> /// <exception cref="System.ArgumentNullException"> /// redirectPath /// or /// externalId /// </exception> /// <exception cref="System.ArgumentException">redirectPath must start with / or ~/</exception> public AuthenticateResult(string redirectPath, ExternalIdentity externalId) { if (redirectPath.IsMissing()) { throw new ArgumentNullException("redirectPath"); } if (!redirectPath.StartsWith("~/") && !redirectPath.StartsWith("/")) { throw new ArgumentException("redirectPath must start with / or ~/"); } if (externalId == null) { throw new ArgumentNullException("externalId"); } this.PartialSignInRedirectPath = redirectPath; var id = new ClaimsIdentity(externalId.Claims, Constants.PartialSignInAuthenticationType); // we're keeping the external provider info for the partial signin so we can re-execute AuthenticateExternalAsync // once the user is re-directed back into identityserver from the external redirect id.AddClaim(new Claim(Constants.ClaimTypes.ExternalProviderUserId, externalId.ProviderId, ClaimValueTypes.String, externalId.Provider)); User = new ClaimsPrincipal(id); }
/// <summary> /// Initializes a new instance of the <see cref="AuthenticateResult" /> class. This /// version of the constructor indicates a partial login (with a redirect) without /// knowledge of the subject claim. /// </summary> /// <param name="redirectPath">The redirect path. This should be relative to the /// current web server. The <c>"~/"</c> prefix is supported to allow application-relative /// paths to be used (e.g. "~/path"). /// </param> /// <param name="externalId">The external identifier that represents the external identity /// provider the partial login is created from. This will be re-presented to correlate the request /// when the user resumes from the redirect.</param> /// <exception cref="System.ArgumentNullException"> /// redirectPath /// or /// externalId /// </exception> /// <exception cref="System.ArgumentException">redirectPath must start with / or ~/</exception> public AuthenticateResult(string redirectPath, ExternalIdentity externalId) { if (redirectPath.IsMissing()) throw new ArgumentNullException("redirectPath"); if (!redirectPath.StartsWith("~/") && !redirectPath.StartsWith("/")) { throw new ArgumentException("redirectPath must start with / or ~/"); } if (externalId == null) throw new ArgumentNullException("externalId"); this.PartialSignInRedirectPath = redirectPath; var id = new ClaimsIdentity(externalId.Claims, Constants.PartialSignInAuthenticationType); // we're keeping the external provider info for the partial signin so we can re-execute AuthenticateExternalAsync // once the user is re-directed back into identityserver from the external redirect id.AddClaim(new Claim(Constants.ClaimTypes.ExternalProviderUserId, externalId.ProviderId, ClaimValueTypes.String, externalId.Provider)); User = new ClaimsPrincipal(id); }