, , MVC5/Web Api 2 , UWP Xamarin, Api Authorize.
, , MVC, POST /Token ( ).
, SSL , , :
C:\Program Files (x86)\IIS Express>iisexpressadmincmd setupSslUrl -url:https:
55970 - -, .
, , ApplicationOAuthProvider.cs , .
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
UserManager<ApplicationUser> _userManager;
ApplicationDbContext db = new ApplicationDbContext();
_userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
try
{
ApplicationUser user = await _userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));
context.Validated(identity);
}
catch (Exception ex)
{
string str = ex.ToString();
}
db.Dispose();
}
public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
string clientId = "";
string clientSecret = "";
context.TryGetFormCredentials(out clientId, out clientSecret);
List<string> validClients = new List<string>(){ "web","Alliance_UWP","Alliance_Xamarin","Alliance_Web" };
if (validClients.Contains(clientId))
context.Validated();
}
, , "-" , Http POST url, grant_type = "" /. UWP, , / , api, Authorize. , , .
, , IIS Express .
Uri tokenUri = new Uri(@"https://localhost:55970/Token");
Uri testCasesUri = new Uri(@"https://localhost:55970/api/Cases");
string accessToken = "";
public MainPage()
{
this.InitializeComponent();
}
private async void btn_SubmitLogin_Click(object sender, RoutedEventArgs e)
{
string username = txt_User.Text;
string password = txt_Password.Password;
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName);
filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.RevocationFailure);
HttpClient client = new HttpClient(filter);
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("client_id", "web");
parameters.Add("grant_type", "password");
parameters.Add("username", username);
parameters.Add("password", password);
try
{
HttpResponseMessage result = await client.PostAsync(tokenUri, new HttpFormUrlEncodedContent(parameters));
string jsonResult = await result.Content.ReadAsStringAsync();
var resultObject = JsonConvert.DeserializeObject<TokenResult>(jsonResult);
accessToken = resultObject.AccessToken;
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
result = await client.GetAsync(testCasesUri);
jsonResult = await result.Content.ReadAsStringAsync();
} catch(Exception ex)
{
string debugBreak = ex.ToString();
}
, - , Xamarin UWP Web Api.