我实际上有一个asp.net网站应用程序,可以通过以下方式将令牌传递给用户:
这是相关的代码:
using Microsoft.Owin;
using Owin;
using System;
using Microsoft.Owin.Security.OAuth;
[assembly: OwinStartup(typeof(MyApp.Web.App_Start.OwinStartup))]
namespace MyApp.Web.App_Start
{
public class OwinStartup
{
public void Configuration(IAppBuilder app)
{
OwinWebApiStartup.Configuration(app);
}
}
}
public static class OwinWebApiStartup
{
public static void Configuration(IAppBuilder app)
{
var provider = //my provider implementation;
var oauthServerOptions = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),
Provider = provider,
};
app.UseOAuthAuthorizationServer(oauthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
AccessTokenProvider = //my provider implementation,
});
}
}
这很好。但是我想添加一个新功能,其中的javascript客户端代码(不再是用户)想要调用我的api,因此它将需要具有令牌,但没有clientid和clientsecret。 这是我的想法:
创建一个新的api端点,(我的javascript客户端代码中只有此端点可以访问,而没有令牌,并且在那里,代码将生成一个令牌(由于所连接的当前用户的用户名),并返回该令牌(将 与用户可以使用现有方法获得的相同)将由javascript客户端代码使用
答案 0 :(得分:0)
我过去曾遇到过这个问题。我通过querystring解决了这个问题,因为owin只能提供一个令牌资源。实际上,依靠owin而不执行自己的代码是很有意义的。
我的伪解决方案:
KeyValuePair<string, string[]> typePair = ctx.Request.Query.FirstOrDefault(x => x.Key == "type");
LoginType? loginType = GetLoginType(typePair);
[...]
switch (loginType)
{
case LoginType.User:
[...]
////within this routine you could set your claims depending on your needs
如果您有其他解决方案,我将非常感谢您分享