asp.net – 带有WebForms和WebApi的Thinktecture IdentityServer
我正在尝试用一段时间来弄清楚如何使用Thinktecture IdentityServer v3为传统的webforms应用程序解决SSO(单点登录).不幸的是我堆积了.
基础设施是这样的: >需要身份验证和授权的WebForm应用程序(可能 我有以下问题希望能帮助我解决问题: >即使使用Web.Config中的set,我也无法使旧的webforms应用程序重定向到IdentityServer.我在Startup.cs中有app.UseCookieAuthentication(….)和app.USEOpenIdConnectAuthentication(….)正确设置(我猜).对于MVC,[Authorize]属性强制重定向到IdentityServer.如何为webforms做到这一点? 任何帮助都感激不尽. 谢谢! 解决方法
我目前正在开发相同类型的项目.这是我到目前为止所发现的.
有4个单独的问题. > Identity Server – 维护用户/客户端/范围的身份验证 下面的自定义授权适用于当前通过WebForm登录的用户作为成员资格对象&我不想再次要求用户通过Identity Server重新登录. 对于直接oAuth身份验证,请在此处查看示例. Sample Javascript Client 配置Javascript一个隐式流可以正常工作.使用api保存令牌连接. Identity Server v3 我不得不配置使用 Custom Grant w IUserService Custom Grants 这些将显示如何配置自定义授权验证.使用用户服务,您可以让身份服务查询现有用户和定制声明. Identity Server有很多配置可以使它成为您自己的配置.这在IdentityServer网站上有很好的记录,我不会介绍如何设置基础知识. 例如:客户端配置 return new List<Client> { new Client { ClientName = "Custom Grant Client",Enabled = true,ClientId = "client",ClientSecrets = new List<ClientSecret> { new ClientSecret("secret".Sha256()),},Flow = Flows.Custom,CustomGrantTypeRestrictions = new List<string> { "custom" } } }; WebApi – 资源 例 需要Nuget包
Startup.cs app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions { //Location of your identity server Authority = "https://localhost:44333/core" }); WebForms的 需要Nuget包
[WebMethod] [ScriptMethod(ResponseFormat.Json)] public static string AuthorizeClient() { var client = new OAuth2Client( //location of identity server,ClientId,ClientSecret new Uri("http://localhost:44333/core/connect/token"),"client","secret"); //ClientGrantRestriction,Scope (I have a Client Scope of read),Listing of claims var result = client.RequestCustomGrantAsync("custom","read",new Dictionary<string,string> { { "account_store","foo" },{ "legacy_id","bob" },{ "legacy_secret","bob" } }).Result; return result.AccessToken; } 这些是该示例的一般声明,但是我可以生成与用户相关的我自己的声明对象以发送到Identity Server&重新生成WebApi要使用的标识. WebForms / JQuery
$('#btnTokenCreate').click(function (e) { //Create Token from User Information Ajax({ url: "Default.aspx/AuthorizeClient",type: "POST" },null,function (data) { sendToken = data.d; //Clear Cookie $.removeCookie('UserAccessToken',{ path: '/' }); //Make API Wrap Info in Stringify $.cookie.json = true; //Save Token as Cookie $.cookie('UserAccessToken',sendToken,{ expires: 7,path: '/' }); }); JQuery WebAPI Ajax function Ajax(options,apiToken,successCallback) { //Perform Ajax Call $.ajax({ url: options.url,data: options.params,dataType: "json",type: options.type,async: false,contentType: "application/json; charset=utf-8",dataFilter: function (data) { return data; },//Before Sending Ajax Perform Cursor Switch beforeSend: function (xhr) { //Adds ApiToken to Ajax Header if (apiToken) { xhr.withCredentials = true; xhr.setRequestHeader("Authorization"," Bearer " + apiToken); } },// Sync Results success: function (data,textStatus,jqXHR) { successCallback(data,jqXHR); },//Sync Fail Call back error: function (jqXHR,errorThrown) { console.log(errorThrown); } }); } AngularJS 这与使用JQuery的JQuery有相同的想法 module.run(function($http) { //Make API Wrap Info in Stringify $.cookie.json = true; //Save Token as Cookie var token = $.cookie('UserAccessToken'); $http.defaults.headers.common.Authorization = 'Bearer ' + token }); 这使得假设您使用与WebForm相同的域.否则,我将使用Query字符串重定向到带有令牌的Angular页面. 对于CORS支持,需要确保WebApi配置了Cors以实现正确的功能.使用
希望这能说明如何处理这个问题 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – WebApi Action过滤器调用两次
- 从ASP.NET WebForms迁移到ASP.NET MVC
- 在asp.net web api中不会触发Application_Error
- asp.net-mvc – ASP.NET MVC 3自定义授权
- asp.net – LINQ to SQL Web应用程序最佳实践
- asp.net-mvc – 关闭剃刀中的HTML编码
- asp.net – 如何在占位符中的动态生成的标签之间创建换行符
- asp.net – 让网站暂时无法使用的优雅方式?
- asp.net-mvc – 在哪里?Json.Encode或@Json.Decode方法在M
- asp.net-mvc – 对Mono XSP托管的Web应用程序的第一次浏览器