// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Text.Encodings.Web; using Microsoft.AspNet.Authentication.OAuth; using Microsoft.AspNet.DataProtection; using Microsoft.AspNet.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.OptionsModel; namespace Microsoft.AspNet.Authentication.MicrosoftAccount { /// /// An ASP.NET middleware for authenticating users using the Microsoft Account service. /// public class MicrosoftAccountMiddleware : OAuthMiddleware { /// /// Initializes a new . /// /// The next middleware in the HTTP pipeline to invoke. /// /// /// /// /// Configuration options for the middleware. /// public MicrosoftAccountMiddleware( RequestDelegate next, IDataProtectionProvider dataProtectionProvider, ILoggerFactory loggerFactory, UrlEncoder encoder, IOptions sharedOptions, MicrosoftAccountOptions options) : base(next, dataProtectionProvider, loggerFactory, encoder, sharedOptions, options) { if (next == null) { throw new ArgumentNullException(nameof(next)); } if (dataProtectionProvider == null) { throw new ArgumentNullException(nameof(dataProtectionProvider)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } if (encoder == null) { throw new ArgumentNullException(nameof(encoder)); } if (sharedOptions == null) { throw new ArgumentNullException(nameof(sharedOptions)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (Options.Scope.Count == 0) { // LiveID requires a scope string, so if the user didn't set one we go for the least possible. // TODO: Should we just add these by default when we create the Options? Options.Scope.Add("wl.basic"); } } /// /// Provides the object for processing authentication-related requests. /// /// An configured with the supplied to the constructor. protected override AuthenticationHandler CreateHandler() { return new MicrosoftAccountHandler(Backchannel); } } }