我有一个在localhost:4200上运行的角度2应用程序 并且在另一端运行api服务器,运行在localhost:1713上,其中有一些产品,客户......以及web api服务器默认apies,例如值API。
我只对我的域提供access-control-allow-origin,我的角度2应用程序运行(localhost:4200)具有此访问权限我可以向所有需要身份验证的apies发送请求(我手动添加访问令牌到请求从邮递员处获得的标题。)
直到这里一切正常但是当我使用此网址向我的令牌api发出请求时:http://localhost:1713/token我的密码和我的角度应用中的用户名我得到了不支持的grant_type'错误。
请帮我解决问题。我想要这个并且只对我的angular 2应用程序域提供访问权限,而不是所有域。
答案 0 :(得分:0)
这与您请求的域无关。向/token
发送请求时,需要指定要使用的身份验证类型。那是grant_type
财产的用途。因此,既然您要发送用户名和密码,您也希望发送:
grant_type: password
稍后您可能希望将refresh_token
或refresh_claims
用于其他目的。在这种情况下,.Net auth中间件不会查找密码,它会在标题中查找您的JWT。
重点是,有许多方法可以使用/token
端点进行身份验证,您需要始终告诉它您希望如何在请求中使用grant_type。如果你不包括它,你会得到你得到的错误。
答案 1 :(得分:0)
我发现了我的问题并通过在第一行中将此代码添加到我的ApplicationOAuthProvider GrantResourceOwnerCredentials方法来修复它。 代码是这样的:
context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "http://localhost:4200" });
并通过向我的webconfig.cs添加代码blew将enable cors添加到此域 代码是这样的:
var cors = new EnableCorsAttribute("http://localhost:4200", "*", "*");
config.EnableCors(cors);
通知: 第一个代码允许访问/ token端点到我的域和第二个 允许访问其他api控制器,如值,产品......